我正在使用dictConfig
来设置日志记录。我的要求之一是将格式化程序的默认转换器(我对所有处理程序使用单个格式化程序simpleFormatter
)更改为time.gmtime
。这将完成like this:
formatter.converter = time.gmtime
如果我有权访问格式化程序。但我没有,所以我无法更改默认转换器。我可以想到两种做我想做的事情:
dictConfig
部分中的formatters
传递相关参数(类似'converter': 'ext://time.gmtime'
)但我认为dictConfig
不支持此额外参数dictConfig
后获取格式化程序并手动应用配置:formatter.converter = time.gmtime
。我不知道如何通过名称获取格式化程序,或者是否支持格式化程序,或者是否会攻击logging.config
模块。在查看了日志记录模块的源代码之后,我既没有找到示例,也没有找到文档,也没有找到实现方法。
有人设法使用dictConfig设置设置formatter.converter
吗?
答案 0 :(得分:2)
以下是如何操作的示例:
import logging
import logging.config
import time
class UTCFormatter(logging.Formatter):
converter = time.gmtime
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'utc': {
'()': UTCFormatter,
'format': '%(asctime)s %(message)s',
},
'local': {
'format': '%(asctime)s %(message)s',
}
},
'handlers': {
'console1': {
'class': 'logging.StreamHandler',
'formatter': 'utc',
},
'console2': {
'class': 'logging.StreamHandler',
'formatter': 'local',
},
},
'root': {
'handlers': ['console1', 'console2'],
}
}
if __name__ == '__main__':
logging.config.dictConfig(LOGGING)
logging.warning('Look out!')
当我运行上述内容时,我得到:
2015-10-17 12:20:36,217 Look out!
2015-10-17 13:20:36,217 Look out!
在'()'
开头的段落中记录All other keys ...
密钥用于自定义实例化{。{3}}。