正确输出Log的姿势

Slf4j

全称:Simple Logging Facade for Java,即简单日志门面接口,和 Apache 的 commons-logging 是一样的概念,它们都不是具体的日志框架,你可以指定其他主流的日志实现框架。


Log级别及使用说明

日志级别 描述
OFF 关闭:最高级别,不输出日志。
FATAL 致命:输出非常严重的可能会导致应用程序终止的错误。
ERROR 错误:输出错误,但应用还能继续运行。
WARN 警告:输出可能潜在的危险状况。
INFO 信息:输出应用运行过程的详细信息。
DEBUG 调试:输出更细致的对调试应用有用的信息。
TRACE 跟踪:输出更细致的程序运行轨迹。
ALL 所有:输出所有级别信息。

日志输出关系,如下图所示:

日志场景说明

  • DEBUG:记录对调试程序有帮助的信息。
  • INFO:用来记录程序运行现场,虽然此处并未发生错误,但是对排查其他错误具有指导意义。
  • WARN:可以用来记录程序运行现场,但是更偏向于表明此处有出现潜在错误的可能。
  • ERROR:表明当前程序运行发生了错误,需要被关注。但是当前发生的错误,没有影响系统的继续运行。
  • FATAL:表明当前程序运行出现了严重的错误事件,并且将会导致应用程序中断。

需要注意点:

  • 避免无效日志打印:日志配置设置 additivity=”false”。
  • 区别对待错误日志:WARN 与 ERROR 都是与错误有关的日志级别,但不要一发生错误就笼统地输出 ERROR 级别日志。一些业务异常是可以通过引导重试就能恢复正常的,例如用户输入参数错误。在这种情况下,记录日志是为了在用户咨询时可以还原现场,如果输出为 ERROR 级别就不适合了。ERROR 级别只记录系统逻辑错误、异常或者违反重要的业务规则,其他错误都可以归为 WARN 级别。
  • 保证记录内容完整:日志记录的内容包括现场上下文信息与异常堆栈信息。记录异常时,一定要输出异常堆栈,例如,logger.error(“xxxx: ${e.message}”, e);日志中如果输出对象实例,要确保实例类重写了 toString() 方法,否则只输出对象的 hash code 值,没有意义。

Reference