Python内置logging模块

最近调试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

  

posted @ 2018-04-28 22:53  成民  阅读(156)  评论(0)    收藏  举报