配置子记录器

JS.*_*JS. 8 python logging

每次我认为我理解了日志记录模块时,gremlins会进来并改变它的工作方式.(好吧,我承认,gremlin可能是我改变我的代码.)

我在这做错了什么?

> ipython
> import logging
> log = logging.Logger("base")
> log.addHandler(logging.StreamHandler())

> log.critical("Hi")
Hi

> log2 = log.getChild("ment")

> log2.critical("hi")
No handlers could be found for logger "base.ment"
Run Code Online (Sandbox Code Playgroud)

我本可以发誓过去,我能够使用儿童记录器而无需额外配置......

unu*_*tbu 8

如果你改变了

log = logging.Logger('base')
Run Code Online (Sandbox Code Playgroud)

log = logging.getLogger('base')
Run Code Online (Sandbox Code Playgroud)

然后它工作:

import logging

log = logging.getLogger('base')
log.addHandler(logging.StreamHandler())
log.critical('Hi')
log2 = log.getChild('ment')
log2.critical('hi')
Run Code Online (Sandbox Code Playgroud)

产量

Hi
hi
Run Code Online (Sandbox Code Playgroud)

  • 唉,我只是跟踪了这个...是的,日志记录模块通过`logging.Manager`无形地代理来创建记录器.当您使用`logging.Logger()`直接创建一个记录器时,您会使系统短路并且事情变得混乱. (2认同)