python日志logging多线程使用

通过下面demo,学会python的logging使用,多线程使用,运行 app.py里的main然后看日志
app.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

import logging
import thread_job

# logging.basicConfig(filename='myapp.log',
#                     format='%(asctime)s %(module)s %(filename)s %(funcName)s %(lineno)d %(levelname)s: %(message)s',
#                     datefmt='%y%m%d %H:%M:%S',
#                     level=logging.DEBUG)
logging.basicConfig(filename='myapp.log',
                    format='%(asctime)s %(filename)s#L%(lineno)d %(levelname)s: %(message)s',
                    datefmt='%y%m%d %H:%M:%S',
                    level=logging.DEBUG)
logger = logging.getLogger(__name__)

if __name__ == '__main__':
    logger.info('app start')
    thread_job.my_do()
    logger.info('done')
    logger.info('----------')

thread_job.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

import logging
import threading
import time

logger = logging.getLogger(__name__)
# 线程任务,统计数
thread_count = 0
thread_lock = threading.Lock()


def thread_job(*args):
    for i in range(10):

        thread_lock.acquire()
        global thread_count
        thread_count = thread_count + args[1]
        thread_lock.release()

        logger.info("thread %s do %s %s, count %s", threading.current_thread().name, i, args[0], thread_count)

        time.sleep(1)


def my_do():
    logger.info('in dd')
    threads = []
    try:
        t1 = threading.Thread(target=thread_job, name='t1', args=('t1-1', 1))
        t2 = threading.Thread(target=thread_job, name='t2', args=('t2-1', 2))
        t3 = threading.Thread(target=thread_job, name='t3', args=('t3-1', 3))
        t4 = threading.Thread(target=thread_job, name='t4', args=('t4-1', 4))
        t5 = threading.Thread(target=thread_job, name='t5', args=('t5-1', 5))

        threads.append(t1)
        threads.append(t2)
        threads.append(t3)
        threads.append(t4)
        threads.append(t5)

        # 多个任务并行,但是只需要用一个任务的时间,高效
        logger.info('thread start')
        for t in threads:
            t.start()
        for t in threads:
            t.join()
        logger.info('thread done')
        logger.info('thread count %s', thread_count)
        logger.info('expect count %s', (1+2+3+4+5)*10)
    except:
        print "Error: unable to start thread"


Python 中,可以使用 `logging` 模块记录日志。如果需要在多线程环境下记录日志,可以使用 `concurrent_log_handler` 模块来实现。 首先需要安装 `concurrent_log_handler` 模块: ``` pip install concurrent_log_handler ``` 然后,可以使用以下代码来记录日志: ```python import logging from concurrent_log_handler import ConcurrentRotatingFileHandler import threading # 创建日志记录器 logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) # 创建文件处理器 handler = ConcurrentRotatingFileHandler(filename='example.log', mode='a', maxBytes=1024, backupCount=3) handler.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # 将处理器添加到记录器 logger.addHandler(handler) # 多线程记录日志 def worker(): logger.debug('Debug message from thread {0}'.format(threading.current_thread().name)) logger.info('Info message from thread {0}'.format(threading.current_thread().name)) logger.warning('Warning message from thread {0}'.format(threading.current_thread().name)) logger.error('Error message from thread {0}'.format(threading.current_thread().name)) logger.critical('Critical message from thread {0}'.format(threading.current_thread().name)) threads = [] for i in range(10): t = threading.Thread(target=worker) threads.append(t) t.start() for t in threads: t.join() ``` 上面的代码中,创建了一个 `ConcurrentRotatingFileHandler` 类实例化的文件处理器,它可以在多线程环境下安全地写入日志文件。然后,将处理器添加到日志记录器中,并使用多线程来记录日志
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值