【问题标题】:How to use the same FileHandler config but with a different file name based on the logger?如何使用相同的 FileHandler 配置,但根据记录器使用不同的文件名?
【发布时间】:2014-02-13 02:00:21
【问题描述】:

如何为多个记录器使用相同的 FileHandler,但文件名根据记录器的不同而不同? 我可以避免写 3 倍的文件处理程序定义吗?

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '...', # I do not want to set the file name here because I want it to be different based on the logger: loggerA.log, loggerB.log, loggerC,log
        },
    },
    'loggers': {
        'loggerA': {
            'handlers': ['file'],
            'propagate': True,
            'level': 'INFO',
        },
        'loggerB': {
            'handlers': ['file'],
            'level': 'ERROR',
            'propagate': False,
        },
        'loggerC': {
            'handlers': ['file'],
            'level': 'INFO',
            'filters': ['special']
        }
    }
}

谢谢

【问题讨论】:

    标签: python django logging


    【解决方案1】:

    为此,您需要创建自己的处理程序,该处理程序(例如)创建一个处理程序列表,然后根据记录器将每个事件传递给其中一个。只是为了节省一点配置似乎不值得。

    class DelegatingHandler(logging.Handler):
        def __init__(self, ...):
            logging.Handler.__init__(self)
            self.handlers = ... # compute a list of other handlers
    
        def handle(self, record):
            handler = ... # determine one of self.handlers based on record contents
            handler.handle(record)
    

    您不必在配置中不必要地重复内容,您可以按照the documentation 引用配置的共享区域。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多