有没有办法检查日志记录是否已经设置?我正在开发一个模块,我希望它能够记录,但前提是父脚本已经设置了记录器。实现此目的的一种方法是将父脚本的记录器对象直接传递给模块并使其默认为 False,然后将所有日志语句包装在 if 记录器中> 阻止但我不想要求用户传递任何内容。理想情况下,如果父脚本没有设置记录器,而在模块中运行,则 logging.getLogger(__name__)
会抛出错误,但事实并非如此。
最佳答案
当您调用导入日志记录
时,它会设置logging._startTime
- 因此您可以执行以下操作:
import time
now = time.time()
import logging
if logging._startTime < now:
print("Logging imported earlier.")
虽然这是一个私有(private)变量,所以可能不是最好的选择,因为不能保证它存在于 future 的版本中。
或者,如果您已添加处理程序或对日志记录实例进行其他修改,则稍后使用相同的名称即可看到这些内容,例如:
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
添加对处理程序的引用,但这又是私有(private)的,并且不会让您知道哪个处理程序是由哪个实例添加的.
关于python - 检查是否设置了日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48587447/