<p>“CallbackFilter”可用于在python的记录器配置文件中实现动态文件路径和文件名。您可以定义写动态日志如下:</p>
<pre><code>def write_dynamic_log(record):
now = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
dynamic_log_name = '/var/log/test_%s.log' %now
log_file = open(dynamic_log_name, "w")
log_file.write(record.msg)
log_file.close();
return True
</code></pre>
<p>然后在配置文件中,可以使用如下过滤器:</p>
<pre><code>[handler_filelog]
class: FileHandler
formatter: brief
level : INFO
filters: [write_dynamic_log]
filename: static.log
</code></pre>
<p>信息或以上日志将输出到static.log和dynamic_log。</p>
<p>我在django项目中测试了它,在这个项目中,我在settings.py中编写了config。它工作得很好。日志记录将如下:</p>
<pre><code>LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '[%(levelname)s] %(asctime)s - %(pathname)s:%(lineno)d\n%(message)s'
},
'debug': {
'format': '[%(levelname)s] %(asctime)s - %(pathname)s:%(lineno)d\n\033[34m%(message)s\033[0m'
},
'error': {
'format': 'Component: %(module)s\nErrorCode: %(funcName)s\nReason: %(funcName)s\nDetail: [%(message)s]'
},
},
'filters': {
'write_error_logs': {
'()': 'django.utils.log.CallbackFilter',
'callback': write_error_log,
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
'debug': {
'class': 'logging.StreamHandler',
'formatter': 'debug',
},
'error': {
'level': 'ERROR',
'class': 'logging.FileHandler',
'filename': '/var/log/SmartStorageApp.err',
'formatter': 'error',
'filters': ['write_error_logs'],
},
},
'loggers': {
'django': {
'handlers': ['debug' if DEBUG else 'console', 'error'],
'level': 'INFO',
'propagate': True,
},
}
}
</code></pre>