Django日志记录 - 正确输出到stdout和stderr
看起来Django的日志记录默认是把所有日志级别的信息输出到标准错误(stderr)上。
比如,当我设置日志记录时是这样的:
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'default': {
'format': "%(asctime)s:%(name)s:%(levelname)s:%(message)s"
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'default',
}
},
'loggers': {
'': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
},
'django': {
'handlers': ['console'],
'level': 'WARNING',
'propagate': False,
},
'appname': {
'handlers': ['console'],
'level': 'WARNING',
'propagate': False,
},
当我把处理器改成:
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'default',
'stream': sys.stdout #Notice the change
}
},
然后所有的输出就变成了标准输出(stdout)。
但我需要的是正确的行为:把信息、调试和警告日志输出到stdout
(警告可以随便,没太大关系),而把异常、错误和严重错误输出到stderr
。
我这里漏掉了什么?(有没有什么明显的设置?大家都知道的?)谢谢大家的帮助!
2 个回答
0
我们应该像文档中那样修正标准流的名称。
"stream": "ext://sys.stdout"
...
https://docs.python.org/3/howto/logging-cookbook.html#custom-handling-of-levels
7
试着定义两个处理程序,比如 consoleout
和 consoleerr
,每个处理程序都要使用正确的数据流。
在 loggers
部分中,为每个条目使用合适的处理程序。