logging 内部的服务级别:
DEBUG 10
INFO 20
WARNING 30
ERROR 40
CRITICAL 50
根据使用习惯,INFO 是重要信息,DEBUG 是普通信息。线上也是开到 DEBUG 级别。
然后调试信息也是通过 DEBUG 服务打印,然后通过 conf.DEBUG_MODE
来区分是不是要打印这种 DEBUG 级别的调试信息。
觉得不甚方便,想了一下,有两种思路:
- 将普通信息也通过 INFO 日志打印,在日志内容中插入部分标识来表示是重要信息,比如 “&NOTICE”。
- 增加一个 TRACE 级别日志。
方案一感觉相对合理一些,但是对于已有项目还是方案二好。
实现
def trace(self, message, *args, **kwargs):
if self.isEnabledFor(TRACE):
self._log(TRACE, message, args, **kwargs)
TRACE = logging.TRACE = 5
logging.addLevelName(TRACE, 'TRACE')
logging.Logger.trace = trace
参考:syslog 日志级别
- EMERG:系统不可用
- ALERT:需要立即采取行动
- CRIT:关键错误
- ERR:一般错误
- WARNING:警告
- NOTICE:一般通知
- INFO:信息性消息
- DEBUG:调试级别的消息
参考:nodejs winston 日志级别
- error:错误
- warn:警告
- info:一般信息
- http:HTTP 请求
- verbose:详细信息
- debug:调试信息
- silly:非常详细的调试信息
参考:java log4j 日志级别
- FATAL:致命
- ERROR:错误
- WARN:警告
- INFO:信息
- DEBUG:调试
- TRACE:跟踪