Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用相同的FileHandler配置,但根据记录器使用不同的文件名?_Python_Django_Logging - Fatal编程技术网

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

Python 如何使用相同的FileHandler配置,但根据记录器使用不同的文件名?,python,django,logging,Python,Django,Logging,如何对多个记录器使用相同的文件处理程序,但根据记录器上的文件名使用不同的文件名? 我可以避免写3次文件处理程序定义吗 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.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']
        }
    }
}

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

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)
您不必在配置中重复不必要的内容,您可以根据引用配置的共享区域