【发布时间】:2020-10-14 18:05:10
【问题描述】:
在 python 的内置日志模块中,您可以创建一个记录器并记录消息:
import logging
log = logging.getLogger('mylogger')
log.info('starting!')
您还可以将 extra 传递给稍后将由格式化程序使用的日志消息:
user = 'john doe'
log.info('starting!', extra={'user': 'john doe'})
但是,对每条消息都明确地执行此操作非常乏味。是否可以为整个记录器设置附加值,以便每个日志都传递它们?
类似:
log = logging.getLogger('mylogger')
log.extras = {'user': 'john doe'}
log.info('starting!')
目前似乎唯一的方法是猴子补丁log() 方法:
def patch_default_extras(logger, extras):
original_log = logger.log
def log_with_extras(level, msg, *args, **kwargs):
kwargs['extra'] = {**extras, **kwargs.get('extra', {})}
return original_log(level, msg, *args, **kwargs)
logger.log = log_with_extras
mylog = logging.getLogger('mylogger')
patch_default_extras(mylog, {'user': 'john doe'})
mylog = logging.getLogger('mylogger')
mylog.log(logging.ERROR, 'hello')
这是相当丑陋的,但除非我错过了什么——这是唯一的方法?
【问题讨论】: