如何使用相同的FileHandler配置,但根据记录器使用不同的文件名?

2024-06-25 23:54:17 发布

您现在位置:Python中文网/ 问答频道 /正文

如何对多个记录器使用相同的文件处理程序,但根据记录器上的不同使用不同的文件名? 我可以避免写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']
        }
    }
}

谢谢


Tags: 文件thetologfalse处理程序handlerslevel
1条回答
网友
1楼 · 发布于 2024-06-25 23:54:17

为此,您需要创建自己的处理程序,例如,它创建了一个处理程序列表,然后根据记录器将每个事件传递给其中一个处理程序。仅仅保存一点配置似乎不值得。你知道吗

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引用配置的共享区域。你知道吗

相关问题 更多 >