如何解决在日志装饰器没有看到自定义级别之前,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 举报,一经查实,本站将立刻删除。