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