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()