python 线程日志

python日志级别

import logging
'''
日志级别:
critical > error > warning > info > debug,notset
级别越高打印的日志越少,反之亦然,即
debug    : 打印全部的日志(notset等同于debug)
info     : 打印info,warning,error,critical级别的日志
warning  : 打印warning,error,critical级别的日志
error    : 打印error,critical级别的日志
critical : 打印critical级别
'''
示例1
import logging  
import logging.handlers  

LOG_FILE = 'tst.log'  
handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes = 1024*1024, backupCount = 5) # 实例化handler,1M*(5+1)   
fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s'  
formatter = logging.Formatter(fmt)   # 实例化formatter  
handler.setFormatter(formatter)      # 为handler添加formatter  
logger = logging.getLogger('tst')    # 获取名为tst的logger  
logger.addHandler(handler)           # 为logger添加handler  
logger.setLevel(logging.DEBUG)  
logger.info('first info message')  
logger.debug('first debug message')  
当多个线程同时去写一个日志文件时会出错或导致日志混乱
可采用threading模块,加锁的方式实现多线程日志保护,实现线程安全
示例2
import threading
import logging
import logging.handlers
__lock = threading.RLock()
def info(self, message):
if ThreadLog.__lock.acquire():
try:
msg = str(message)
msg = msg.decode('utf8').encode('gbk')
self.logger.info(msg)
if self.stdout:
print self.__format(msg)
except:
ThreadLog.process_my_exception()

ThreadLog.__lock.release()
 

posted on 2017-07-25 10:42  heit  阅读(2504)  评论(0编辑  收藏  举报