• SpringBoot 日志总结


    常用的日志库

    在日常开放中追踪和排查问题,使用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不兼容。

    常用日志框架适配图:

    img

    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 ! ");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    打印输出:

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

    封装日志

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

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

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

    // 封装公共日志类,获取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!  ");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    打印如下:

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

    日志的级别

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

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

    SpringBoot 配置日志级别:

    整个应用设置级别:

    logging:
      level:
        root: debug
    
    • 1
    • 2
    • 3

    指定包设置级别:

    logging:
      level:
        com.terry.test: debug
    
    • 1
    • 2
    • 3

    常用日志配置文件

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

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

    设置日志文件

    logging:
      file:
        name: test.log
    
    • 1
    • 2
    • 3

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

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

    	@Slf4j
        public static class TestSlf4j{
            @Test
            public void test(){
                log.info(" hello Slf4j log! ");
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    打印如下:

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

    Lombok 常用的日志注解:

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

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

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

  • 相关阅读:
    【AD9361 数字接口CMOS &LVDS】A CMOS
    为什么曲面函数的偏导数可以表示其曲面的法向量?
    springSecurity基础(二)连接数据库的登录
    前端入门学习笔记三十五
    Redis 好友关注-朋友圈
    Linux内核分析(八)--用户/内核缓冲区及磁盘高速缓存
    大数据培训技术自定义组件Source案例测试
    「聊设计模式」之模板方法模式(Template Method)
    idea连接数据库运行jsp文件出现问题
    JavaEE:多线程(3):案例代码
  • 原文地址:https://blog.csdn.net/qq_37493888/article/details/126575770