2009-12-31 215 views
55

如果我设置日志模块的命令行参数是这样来调试:确定Python日志记录器是否设置为DEBUG级别?

if (opt["log"] == "debug"): 
    logging.basicConfig(level=logging.DEBUG) 

我怎么能以后告诉如果记录器设置为DEBUG?如果True标志被传递给它,并且如果没有给出标志,它会默认 在根记录器被设置为DEBUG时打印定时信息,所以我正在编写一个装饰器 。

+0

你最终还是会希望使用特定的,而不是这个耦合到记录一些东西,比如选择[“time_functions”](根据其他选项,您可能会默认为True/False)。 – 2010-01-01 00:19:25

回答

69
logging.getLogger().getEffectiveLevel() 

logging.getLogger()无参数获取根级记录器。

http://docs.python.org/library/logging.html#logging.Logger.getEffectiveLevel

+0

非常好,谢谢!我正在做类似的事情(除了向getLogger传递显式的“root”),但是我在装饰器的__init__函数中,在记录器设置为调试之前执行了此操作:\ – 2009-12-31 23:40:08

+1

如果您想要level的名称,而不是数字,你可以使用它将数字转换为一个字符串(如'INFO'):logging.getLevelName() – guettli 2017-07-13 10:09:20

57

其实,有一个更好的:使用代码logging.getLogger().isEnabledFor(logging.DEBUG)。我在尝试了解如何处理getEffectiveLevel()的结果时发现它。 :-)

(下面是日志模块本身使用的代码的图像。)

logging code

+0

这应该是公认的答案,因为它具有相同的事情,运行时复杂度较低。 – AndyJost 2017-09-21 16:57:25

相关问题