[英]set default logging extra for python's Logger object
在內置的 python 日志模塊中,您可以創建一個記錄器和日志消息:
import logging
log = logging.getLogger('mylogger')
log.info('starting!')
您還可以將 extras 傳遞給稍后將由格式化程序使用的日志消息:
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')
這是相當丑陋的,但除非我遺漏了什么——這是唯一的方法?
執行此操作的內置方法是使用日志記錄適配器。 過濾器也可以工作,但對於您描述的用例適配器是完美的。
import logging
logging.basicConfig(level=logging.DEBUG, format='user: %(user)s - message: %(msg)s')
logger = logging.getLogger()
logger_with_user = logging.LoggerAdapter(logger, {'user': 'jane doe'})
logger_with_user.info('test') # user: jane doe - message: test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.