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