介绍

日志级别代表着日志信息对应问题的严重性,为了更快的筛选符合目标的日志信息

试想一下这样的场景,假设你是一家 2 万人公司的老板,如果每个员工的日常工作和琐碎的信息都要反馈给你,那你一定无暇顾及。于是就有了组织架构,而组织架构就会分级,有很多的级别设置,如下图image.png

有了组织架构之后,就可以逐级别汇报消息了,例如:组员汇报给组长,组长汇报给研发一组,研发一组汇报给 Java 研发,等等依次进行汇报

日志级别大概是同样的道理,有了日志级别之后就可以过滤自己看到的信息了,比如只关注 Error 级别的,就可以根据级别过滤出相关日志信息,节约开发者的信息筛选时间

日志级别的分类

日志级别从到到底依次为:FATALERRORWARNINFODEBUGTRACE

  • FATAL致命信息,表示需要立即被处理的系统级错误
  • ERROR错误信息,级别较高的错误日志信息,但仍不影响系统的继续运行
  • WARN警告信息,不影响使用,但需要注意的问题
  • INFO普通信息,用于记录应用程序正常运行时的一些信息,例如系统启动完成,请求处理完成等
  • DEBUG调试信息,需要调试时候的关键嘻嘻打印
  • TRACE追踪信息,比 DEBUG 更细粒度的信息事件(除非有特殊用意,否则请用 DEBUG 级别替代)

日志级别通常和测试人员的 bug 级别没有关系

  • 日志级别是开发人员设置的,用来给开发人员看的。
  • 日志级别的正确设置,也与开发人员的工作经验有关。如果开发人员把 error 级别的日志设置成了 INFO,就很有可能会影响开发人员对项目运行情况的判断
  • 出现 error 级别的日志信息较多时,可能也没有任何问题。测试的 bug 级别更多是依据现象和影响范围来判断

日志级别的顺序

image.png

  • 级别越高,收到的消息越少

日志级别的使用

日志级别是开发人员自己设置的。开发人员根据自己的理解来判断该信息的重要程度

  • 类似公司管理,通常由领导来判断什么样的事情需要汇报,什么样的事情不需要汇报

针对这些级别,Logger 对象分别提供了对应的方法,来输出日志

@RequestMapping("/printLog")  
public String printLog(){  
    logger.trace("========trace========");  
    logger.debug("========debug========");  
    logger.info("========info========");  
    logger.warn("========warn========");  
    logger.error("========error========");  
  
    return "打印不同级别的日志";  
}

SpringBoot 默认的日志框架是 LogbackLogback 没有 FATAL 级别,它被映射到 ERROR

  • 出现 FATAL 日志,表示服务已经出现了某种程度的不可用,需要联系系统管理员紧急介入处理
  • 通常情况下,一个进程声明周期中应该最多只有依次 FATAL 记录

观察打印的结果:image.png

  • 结果发现,只打印了 infowarnerror 级别的日志
  • 这与日志级别的配置有关,日志的输出级别默认是 info 级别,所以只会打印大于等于此级别的日志,也就是 infowarnerror
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐