python - 检查是否设置了日志记录

标签 python python-2.7 logging

有没有办法检查日志记录是否已经设置?我正在开发一个模块,我希望它能够记录,但前提是父脚本已经设置了记录器。实现此目的的一种方法是将父脚本的记录器对象直接传递给模块并使其默认为 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/

相关文章:

python - "ImportError: matplotlib requires dateutil"即使在更新 site-packages 文件夹中的 dateutil 文件夹后仍出现此错误

python - 如何自动选择和处理/root/facedetect 目录中的每个图像而不是选择特定图像

python - 使用 multiprocessing.Pool 时出现问题

java - 正确初始化log4j系统

logging - java中多线程环境中非常快的日志记录

python - Tensorflow 数据集 API - 将窗口应用于多个序列

python - 为 Python 做贡献

python - 在 python 中,您应该使用 if 进行 None 检查,还是使用 `or` ?

python - 如何制定一个类方法?

c++ - qSetMessagePattern ("%{file}(%{line}): %{message}")输出 "unkown(0)"