簡體   English   中英

為 python 的 Logger 對象設置默認日志記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM