文章目录

  • 常用的日志库
  • SpringBoot 日志的基本上使用
  • 封装日志
  • 日志的级别
  • 常用日志配置文件
  • 使用Lombok打印日志,以及@Slf4j、@Log实现类

常用的日志库

在日常开放中追踪和排查问题,使用System.out.println打印不方便管理,如输出的类,时间等。现主流的日志框架有Log4j、logback、commons logging等。主要分为以下两大类:

日志接口:

Commons Logging ( JCL):Apache推出的日志接口。

SLF4J(Simple Logging Facade for Java):桥接方式对接各种日志实现。

日志实现:

JUL(Java Util Logging):JDK 1.4后内置日志库

Log4j:Apache顶级日志框架,后推出Log4j2被替代

Logback:ceki首创log4j之后,又推出了logback “可靠、通用、快速而又灵活的Java日志框架”,其直接实现了SLF4J

log4j2:Apache参考Logback思路并做出优化,与log4j不兼容。

常用日志框架适配图:

spring boot网页log日志 spring boot gc日志_spring boot网页log日志

SLF4J:是门面的担当,本质是个空壳,用来适配各种日志。

SpringBoot 日志的基本上使用

SpringBoot默认门面采用:SLF4J,实现采用:logback。

代码如下:

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class TestLog {

    private static final Logger log = LoggerFactory.getLogger(TestLog.class);

    @Test
    public void test(){
        log.info(" hello log ! ");
    }
}

打印输出:

2022-08-28 21:50:42.757  INFO 2452 --- [           main] com.terry.test.TestLog                   :  hello log !

封装日志

如上代码使用日志,每一个类都需要如下这段代码

private static final Logger log = LoggerFactory.getLogger(TestLog.class);

可通过子类继承父类方式封装,代码如下:

// 封装公共日志类,获取log对象
public static class BaseLog {

	Logger log;

    public BaseLog(){
        Class<? extends BaseLog> aClass = this.getClass();
        log = LoggerFactory.getLogger(aClass);
    }
}

// 继承父类 直接使用log
@SpringBootTest
public static class BaseLogTest extends BaseLog{

    @Test
    public void test(){
    	log.info(" hello base log!  ");
    }
}

打印如下:

2022-08-28 21:57:54.620  INFO 23264 --- [           main] com.terry.test.TestLog$BaseLogTest       :  hello base log!

日志的级别

logback中对日志归类了6种级别,从低到高如下:

  • trace:默认不打印终端,不输出文件。用于调试
  • debug:默认打印终端,不输出文件。用于调试
  • info:默认打印终端,输出文件。用于记录程序日志、状态信息
  • warning:警告信息。用于记录参数异常
  • error:错误信息。用于记录错误,不会导致中断,但是会影响整个流程。
  • fatal:遇到了致命错误,必须马上终止程序。

SpringBoot 配置日志级别:

整个应用设置级别:

logging:
  level:
    root: debug

指定包设置级别:

logging:
  level:
    com.terry.test: debug

常用日志配置文件

更改打印格式,只打印日期和内容。

logging:
  pattern:
    console: "%d - %m%n"
2022-08-28 22:22:14,514 -  hello log !

设置日志文件

logging:
  file:
    name: test.log

日志文件按日期和大小分片(开发常用)

logging:
  file:
    name: test.log
  logback:
    rollingpolicy:
      # 最多七个日志文件
      max-history: 7
      # 每个文件最大4kb
      max-file-size: 4KB
      # 按日期打印日志文件
      file-name-pattern: test.%d{yyyy-MM-dd}.%i.log

使用Lombok打印日志,以及@Slf4j、@Log实现类

Lombok无需继承类,一个注解即可使用log,代码如下。

@Slf4j
    public static class TestSlf4j{
        @Test
        public void test(){
            log.info(" hello Slf4j log! ");
        }
    }

打印如下:

22:36:14.039 [main] INFO com.terry.test.TestLog$TestSlf4j -  hello Slf4j log!

Lombok 常用的日志注解:

@Slf4j:在SpringBoot中使用实现是Logback

@Log:JDK的日志库(Java Util Logging)

还支持注解:@Log4j、@Log4j2、@JBossLog、@CommonsLog