繁体   English   中英

无法使用python3.6中的日志记录模块在流处理程序上打印自定义日志级别

[英]Not able to print custom log level on stream handlers using logging module in python3.6

以下是__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

除非您自己创建了自定义处理程序,否则python中没有TRACE日志级别

以下是日志级别列表

在此处输入图片说明

请在那里参考https://docs.python.org/2/library/logging.html#levels

您的代码无法运行:例如,将其粘贴到源文件中,由于f未定义,因此代码将失败。 注释掉那条线,我可以毫无问题地运行它。 确定xyz的代码之前调用了log_setup()吗? 我的猜测是不是。 另外,线

root.handlers = []

不应该在那里-您不应该这样做,因为handlers是一个内部属性,并不意味着您可以直接进行更改。 线

logging.trace = trace

日志模块级别的便利函数不带初始对象参数,并且具有诸如debug(msg, *args, **kwargs)类的签名,因此它也看起来是错误的。 大概您希望模块级trace功能具有类似的签名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM