使用非根记录器获取所有级别的事件

时间:2014-07-24 23:35:25

标签: python logging

我有一个非根记录器,附带了一些处理程序,我希望记录器将每个事件传递给它们,包括用户定义级别的事件 - 因此我做了log.setLevel(NOTSET)which is the lowest level (0)

然而,我不想要makes the logger inherit the level of the parent (root) logger,因为将这些事件传递给我的处理程序应该是无条件的。

我想知道log.setLevel(1)在这里是否是正确的选择。它看起来并不优雅,所以也许还有另一种方法可以实现这个目标吗?

这是一个最小的例子 - 它什么都不打印,这不是我想要的:

from logging import getLogger, StreamHandler, NOTSET
from sys import stdout

log= getLogger("mylogger")
handler= StreamHandler(stdout)
log.addHandler(handler)
log.setLevel(NOTSET)

log.debug("something")

1 个答案:

答案 0 :(得分:2)

我认为你正确地采用了正确的方式:如果你只是担心处理内置级别,你可以毫不犹豫地使用log.setLevel(logging.DEBUG)。在这种情况下,您希望涵盖每个可能的用户定义级别,这可以使用1级别来实现。我不认为这是不优雅的,这与log.setLevel(logging.DEBUG)之间的唯一区别是&#39 ;对于您正在使用的级别没有内置常量。如果它让你感觉更好,你可以定义一个映射到1的常量来澄清你正在做的事情:

from logging import getLogger, StreamHandler
from sys import stdout

ALL_LEVELS = 1

log= getLogger("mylogger")
handler= StreamHandler(stdout)
log.addHandler(handler)
log.setLevel(ALL_LEVELS)

log.debug("something")