微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在日志装饰器没有看到自定义级别之前,python 日志中的 addLevelName

如何解决在日志装饰器没有看到自定义级别之前,python 日志中的 addLevelName

所以,在 main.py 中,我设置了不同的日志级别:

logging.METRICS = logging.INFO+1
logging.TIME = logging.METRICS+1
logging.DATAPROCESSING = logging.TIME+1
...and so on
logging.addLevelName(logging.METRICS,'METRICS')
logging.addLevelName(logging.TIME,'TIME')

当像这样显式调用时,代码中其他地方的装饰器实际上会看到它(并将其打印为这样的级别):

@decorator(logger_level=25)
def func(args):

但是当我这样称呼它时,它不会将其识别为这样的级别并打印出日志记录没有这样的属性

@decorator(logger_level=logging.METRICS)
def func(args):

我的问题是,为什么会这样?登录装饰器的加载速度是否比新属性设置更快?我如何克服这个问题,我真的需要新的自定义日志记录级别。

装饰器看起来像这样:

    def decorator(logger_level=logging.INFO):
        def timedecorator(method):
            @functools.wraps(method)
            def timed(self,*args,**kw):
                ts = time.time()
                result = method(self,**kw)
                te = time.time()
                logging.getLogger('time').log(logger_level,'time: %r  %2.2f ms',method.__name__,(te - ts) * 1000)
            return result
        return timed
    return timeitdecorator

解决方法

addLevelName 不会将级别添加为模块级别的变量。它确实将其放入了级别名称字典中。你应该像这样调用你的装饰器:@decorator(logger_level="METRICS")。也适用于内置关卡。

您还需要稍微更改装饰器:

level = logging._checkLevel(logger_level) // translate level string to int
logging.getLogger('time').log(level,/*other args*/)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。