logging模块学习笔记:handler对象
handler对象有以下几个,常用的为StreamHandler、FileHandler:
StreamHandler
FileHandler
NullHandler
WatchedFileHandler
RotatingFilehandler
TimedRotatingFilehandler
SocketHandler
DatagramHandler
SysLoghandler
Memoryhandler
HTTPHandler
Handler的三个基础操作:
1、设置输出格式
设置输出格式要用到的对象是Formatter,初始化方法
formater = logging.Formatter(格式)
handler.setFormatter(formater)
1 import logging 2 import sys 3 4 l_g = logging.getLogger() 5 l_g.setLevel(logging.DEBUG) 6 7 s_h = logging.StreamHandler(sys.stderr) 8 f_h = logging.FileHandler('test.log') #设置文件对象,默认是以追加形式写入 9 10 l_g.addHandler(s_h) 11 l_g.addHandler(f_h) 12 formatter = logging.Formatter('%(name)s - %(levelname)s - %(asctime)s - %(message)s') #设置formatter 13 s_h.setFormatter(formatter) 14 f_h.setFormatter(formatter) 15 16 l_g.debug('debug msg') 17 l_g.info('info msg') 18 l_g.error('error msg') 19 l_g.warn('warn msg')
2、设置输出级别
如上例,文件日志只记录error级别的,
f_h.setLevel(logging.ERROR)
3、设置过滤器
1 import logging 2 import sys 3 4 l_g = logging.getLogger('a.b.c') 5 l_g.setLevel(logging.DEBUG) 6 7 s_h = logging.StreamHandler(sys.stderr) 8 f_h = logging.FileHandler('test.log') 9 10 l_g.addHandler(s_h) 11 l_g.addHandler(f_h) 12 formatter = logging.Formatter('%(name)s - %(levelname)s - %(asctime)s - %(message)s') #设置formatter 13 s_h.setFormatter(formatter) 14 f_h.setFormatter(formatter) 15 f_h.setLevel(logging.ERROR) 16 filter=logging.Filter('a.b') #设置过滤器 17 s_h.addFilter(filter) 18 l_g.debug('debug msg') 19 l_g.info('info msg') 20 l_g.error('error msg') 21 l_g.warn('warn msg')
s_h 这个流对象增加了一个过滤器,只有符合的才会输出,如果过滤器改为Filter('a.b.d'),则不会输出