早些时候老被python的logging搞晕,有时候不想在屏幕上打印,它老是在屏幕打印,有时候level设不对.
今天又看了一下python的 logging/__init__.py
它有两个级别, 一个是Logger.level,另一个是 Handler.level ,关系如下:
def log(self, level, msg, *args, **kwargs):
if self.isEnabledFor(level):
self._log(level, msg, args, **kwargs)
def _log(self, level, msg, args, exc_info=None, extra=None):
record = self.makeRecord(self.name, level, fn, lno, msg, args, exc_info, func, extra)
self.handle(record)
def handle(record):
for hdlr in c.handlers:
found = found + 1
if record.levelno >= hdlr.level: | record.level: log时候的参数,
hdlr.handle(record) |
WARN = WARNING
INFO = 20
DEBUG = 10
Logger.level 起作用的方式:
def isEnabledFor(self, level):
if self.manager.disable >= level: 不是disable
return 0
return level >= self.getEffectiveLevel() 返回logger.level ,如果 level 没有定义的话,尝试返回它的parent的level
结论:
只有 record.level > logger.level & record.levle>logger.hander.level, 才会写到handler
root = RootLogger(WARNING) 默认是WARNING 所以首先应该root.setLogLevel(DEBUG),
class Handler(Filterer)
def __init__(self, level=NOTSET): 默认是NOTSET, 最低