检查是否已设置日志记录

时间:2018-02-02 16:57:32

标签: python python-2.7 logging

有没有办法检查是否已经设置了日志记录?我有一个我正在处理的模块,我希望它能够记录,但前提是父脚本已经设置了记录器。一种方法是将父脚本的logger对象直接传递给模块,并将其默认为False,然后将所有日志语句包含在if logger块中,但我更喜欢不要求用户传递任何东西。理想情况下,如果在父脚本没有设置记录器的情况下在模块中运行,logging.getLogger(__name__)会抛出错误,但事实并非如此。

1 个答案:

答案 0 :(得分:1)

当您致电import logging时,它会设置logging._startTime - 所以您可以执行以下操作:

import time
now = time.time()
import logging
if logging._startTime < now:
    print("Logging imported earlier.")

这是一个私有变量,因此可能不是最好的选择,因为在将来的版本中不能保证它存在。

或者,如果您已添加处理程序或对日志记录实例进行了其他修改,则可以在以后使用相同名称时看到这些,例如:

import logging

x = logging.getLogger('foo')
x.addHandler(logging.NullHandler())
y = logging.getLogger('bar')
z = logging.getLogger('foo')

for i in x, y, z:
    print(i.handlers)

结果:

[<logging.NullHandler object at 0x7f2affa62a90>]
[]
[<logging.NullHandler object at 0x7f2affa62a90>]

调用addHandler也会将处理程序的引用添加到logging._handlerList,但这又是私有的,并且不会让您知道哪个处理程序是由哪个实例添加的。