下面是__init__.py
文件中的函数,这意味着这部分代码始终在执行代码时运行
import logging
def log_setup():
logging.TRACE = 5
logging.addLevelName(5, 'TRACE')
def trace(obj, message, *args, **kws):
obj.log(logging.TRACE, message, *args, **kws)
logging.Logger.trace = trace
logging.trace = trace
root = logging.getLogger("TEST")
root.setLevel(5)
ch = logging.StreamHandler()
ch.setFormatter(f)
ch.setLevel(5)
root.handlers = []
root.addHandler(ch)
我在其中一个库xyz.py中有以下代码
import logging
log = logging.getLogger("TEST."+__name__)
if log.trace:
print("***ELLO***", log.getEffectiveLevel())
print("***ELLO***", log.isEnabledFor(logging.DEBUG))
print("***ELLO***", log.isEnabledFor(logging.TRACE))
log.trace("Hey Statement printed")
通过脚本调用时,无法打印log.trace。有趣的是,对于log.isEnabledFor(logging.TRACE)始终返回False。
不确定我在这里缺少什么
下面是输出
***ELLO*** 10
***ELLO*** True
***ELLO*** False
答案 0 :(得分:1)
除非您自己创建了自定义处理程序,否则python中没有TRACE日志级别
下面是日志级别列表
请在那里参考 https://docs.python.org/2/library/logging.html#levels
答案 1 :(得分:1)
您的代码无法运行:例如,将其粘贴到源文件中,由于f
未定义,因此它失败。注释掉那条线,我可以毫无问题地运行它。您是否确定在log_setup()
中的代码之前调用xyz
?我的猜测是不是。另外,这行
root.handlers = []
不应该在那里-您不应该这样做,因为handlers
是一个内部属性,并不意味着您可以直接进行更改。线
logging.trace = trace
看起来也是错误的,因为日志记录模块级的便捷功能不采用初始对象参数,而是具有诸如debug(msg, *args, **kwargs)
之类的签名。大概您希望模块级trace
函数具有类似的签名。