最近调试Python代码比较多,发现logging模块很好用。
我的用法如下:
import logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(filename)s [line: %(lineno)d] - %(message)s') #logging.disable(logging.CRITICAL) logging.info('your message')
需要取消注释时去掉代码中的#即可。
2018.11.2 添加
这几天发现一个设置logger后重复打印的问题。
代码如下:
import logging logging.basicConfig() logging.error('123') logger = logging.getLogger('x') hdlr = logging.StreamHandler() hdlr.setLevel(20) logger.addHandler(hdlr) logger.setLevel(20) logger.info('123')
输出:
ERROR:root:123 123 INFO:x:123
查了查,发现原因是:
可以通过官网查到。
即:propagate为True的情况下,子logger会将message发送到上级logger的handler,不管上级logger的level的大小,只考虑该handler的level。
(Messages are passed directly to the ancestor loggers’ handlers - neither the level nor filters of the ancestor loggers in question are considered.)
对应代码为:
while c: for hdlr in c.handlers: found = found + 1 if record.levelno >= hdlr.level: hdlr.handle(record) if not c.propagate: c = None #break out else: c = c.parent