> 文章列表 > 49天精通Java,第22天,Java日志框架,Log4j日志级别

49天精通Java,第22天,Java日志框架,Log4j日志级别

49天精通Java,第22天,Java日志框架,Log4j日志级别

在这里插入图片描述

目录

    • 一、异常与日志
    • 二、下面来聊一下,日志的作用
    • 三、记录日志的规范
    • 四、日志的内容
    • 五、Log4j
      • 1、TRACE
      • 2、DEBUG
      • 3、INFO
      • 4、WARN
      • 5、ERROR
      • 6、FATAL

一、异常与日志

在理想的国度,用户输入数据的格式都是正确的,选择打开的文件也都是存在的,调用的第三方接口也都是网络稳定,程序的代码也是永远都没有bug的。

不过,在现实的世界里,bug无处不在,用户瞎输入、第三方接口间歇性失败、网络故障、未知错误,太多太多了。

此时,在bug面前,程序的稳定性尤为重要,一遇到bug就死翘翘,一遇到异常就宕机,这…

在遇到上述异常时,及时有效的通知客户、保存现存的所有工作、允许用户安全的退出程序、异常之下,错误日志的有效记录,显得尤为重要。

然而,在实际的工作中,大部分程序员都没有将日志的记录规范化、重点化,都是得过且过的状态。

项目上线后,一天好几百万的业务办理,一个文件日志好几十万行,在Linux中查看日志,没有固定的关键字定位,两眼一码黑,找什么找,怎么找?

拷贝到本地后,也是如此,通过notepad打开日志文件,也是找不到问题所在,只有一个异常日志,具体什么原因不知道,多线程缘故,有的小伙伴连事故的起点都找不到。这种情况下,你要怎么解决?

开发人员一定要在最开始的时候,就养成一种良好的日志记录习惯,哪些日志要记录,哪些日志不用记,都是什么级别的日志。

要想定位问题,通过什么关键字去定位,如何才能做到一模而了然。

二、下面来聊一下,日志的作用

  1. 快速定位问题;
  2. 记录业务流程;
  3. 跟踪数据的变化,做到数据的预测;
  4. 数据统计和性能分析;
  5. 采集运行环境、服务器数据日志;
  6. 根据日志进行结算,这个我还真遇到过;
  7. 相关部门审计要用;

日志最大的用处,还是快速定位问题,快速找到问题原因。

三、记录日志的规范

1、日志的可读性,日志是记录问题的,然后让维护人员看的,规范的、通俗易懂的日志才是王道。

2、日志的性能,不管是记录到文件里,还是记录到数据库里,记录日志肯定是要消耗程序性能的,这样,哪些需要记下,哪些不用记,需要权衡利弊。

3、大的循环中,尽量不要记录日志。

4、日志的级别,一般情况下,程序运行时记录info日志,发生异常时记录error日志,也可以记录警告日志,比如某些参数超过了,但是不影响整体程序的运行。

四、日志的内容

哪些内容需要记录在日志中,日志不是越多越好,越丰满越好,凡是要有一个度。

  1. 日期;
  2. 时间;
  3. 日志级别;
  4. 代码位置;
  5. 线程号;
  6. 日志内容;
  7. 错误码;
  8. 错误信息
  9. 业务描述;
  10. 关键字,比如产品id;
  11. 入参、回参;

总之一句话,你认为哪些参数比较重要,有助于你排查问题,就记录哪些。

五、Log4j

Log4j 是 Apache 的一个开源项目,项目中一般都是通过Log4j来记录日志,可以通过配置文件定义日志输出的级别、格式、存储路径等。

Log4j 中将要输出的 Log 信息定义了 6 种级别,依次为 TRACE、DEBUG、INFO、WARN、ERROR 和 FATAL。

1、TRACE

很低的日志级别,一般不会使用。

2、DEBUG

一般在项目调试阶段使用,记录的日志更细粒化,主要打印开发过程中的一些重要变量。

3、INFO

info日志,是最常用的日志,用于记录正常运行情况下,程序的执行情况,执行轨迹,打印一些比较重要的东西,但不能滥用,避免日记记录过多,维护运维阶段定位问题过于麻烦。

4、WARN

主要用于记录一些警告,比如你的本意是查询某些产品信息,但是没有查到,逻辑上没有错误,但业务上说不通。

5、ERROR

通常在发生异常、程序入参校验失败时,用error级别记录,也会单独产生error文件。

6、FATAL

FATAL 指出每个严重的错误事件将会导致应用程序的退出,这个级别比较高,重大错误,程序无法恢复,必须通过重启程序来解决。

在这里插入图片描述

🏆本文收录于Java基础教程(入门篇),包含面向对象、基本数据类型、数组、继承和多态、泛型、枚举等Java基础知识点。

🏆姐妹篇,Java基础教程系列,目前已经700+订阅,CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

🏆姐妹进阶篇,Java基础教程(进阶篇),包含Java高并发、Spring、MySQL等Java进阶技术栈。