SpringBoot日志配置

Posted on 2024-01-27 22:53  弯弓射雕的男人  阅读(56)  评论(0编辑  收藏  举报

1. 简介

  1. Spring使用
    1. spring5及以后 commons-logging被spring直接自己写了。
  1. 支持 log4j2,logback是默认使用的。
  2. 虽然日志框架很多,但是我们不用担心,使用 SpringBoot 的默认配置就能工作的很好

 

SpringBoot怎么把日志默认配置好的

1、每个starter场景,都会导入一个核心场景spring-boot-starter

2、核心场景引入了日志的所用功能spring-boot-starter-logging

3、默认使用了logback + slf4j 组合作为默认底层日志

4、日志是系统一启动就要用xxxAutoConfiguration是系统启动好了以后放好的组件,后来用的。

5、日志是利用监听器机制配置好的。ApplicationListener

6、日志所有的配置都可以通过修改配置文件实现。以logging开始的所有配置都是日志。

 

2. 日志格式

2023-03-31T13:56:17.511+08:00 INFO 4944 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-03-31T13:56:17.511+08:00 INFO 4944 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.7]

默认输出格式:

  • 时间和日期:毫秒级精度
  • 日志级别:WARN, DEBUG, or 注意: logback 没有ERROR
  • 进程 ID
  • ---: 消息分割符
  • 线程名: 使用[]包含
  • Logger 名: 通常是产生日志的类名
  • 消息: 日志记录的内容

    注意: logback 没有FATAL级别对应的是ERROR

     

  • 默认值:参照:spring-bootadditional-spring-configuration-metadata.json文件

    默认输出格式值:%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

    可修改为:'%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} ===> %msg%n'

    3. 记录日志

  • Logger logger = LoggerFactory.getLogger(getClass());

    或者使用Lombok的@Slf4j注解

  • 4. 日志级别

    • 由低到高:ALL,TRACE, DEBUG, INFO, WARN, ERROR,FATAL,OFF
      • 只会打印指定级别及以上级别的日志
      • ALL:打印所有日志
      • TRACE:追踪框架详细流程日志,一般不使用
      • DEBUG:开发调试细节日志
      • INFO:关键、感兴趣信息日志
      • WARN:警告但不是错误的信息日志,比如:版本过时
      • ERROR:业务错误日志,比如出现各种异常
      • FATAL:致命错误日志,比如jvm系统崩溃
      • OFF:关闭所有日志记录
    • 不指定级别的所有类,都使用root指定的级别作为默认级别
    • SpringBoot日志默认级别是 INFO

     

    1. logging.level.<logger-name>=<level>指定日志级别
    2. TRACE, DEBUG, INFO, WARN, ERROR, FATAL, or OFF定义在 LogLevel类中
    3. root 的root,可以配置

      5. 日志分组

      比较有用的技巧是:

      将相关的logger分组在一起,统一配置。SpringBoot 也支持。比如:Tomcat 相关的日志统一设置

      logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat
      logging.level.tomcat=trace

      SpringBoot 预定义两个组

      Name

      Loggers

      web

      org.springframework.http, org.springframework.boot.actuate.endpoint.web,

      sql

      org.hibernate.SQL, 6. 文件输出

       

       

       

      6. 文件输出

      SpringBoot 默认只把日志写在控制台,如果想额外记录到文件,可以在logging.file.name or logging.file.path配置项。

       

       

      7. 文件归档与滚动切割

      归档:每天的日志单独存到一个文档中。

      切割:每个文件10MB,超过大小切割成另外一个文件。

      1. 每天的日志应该独立分割出来存档。如果使用application.properties/yaml文件指定日志滚动规则。
      2. 如果是其他日志系统,需要自行配置(添加log4j2-spring.xml
      3. 支持的滚动规则设置如下

       

      8. 自定义配置

      通常我们配置application.properties 就够了。当然也可以自定义。比如:

       

      如果可能,我们建议您在日志配置中使用-spring 变量(例如,logback-spring.xml 而不是 logback.xml)。如果您使用标准配置文件,spring 无法完全控制日志初始化。

      最佳实战:自己要写配置,配置文件名加上 xx-spring.xml

      9. 切换日志组合

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
          <exclusions>
              <exclusion>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-logging</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-log4j2</artifactId>
      </dependency>

      log4j2支持yaml和json格式的配置文件

      格式

      依赖

      文件名

      YAML

      com.fasterxml.jackson.core:jackson-databind + com.fasterxml.jackson.dataformat:jackson-dataformat-yaml

      log4j2.yaml + log4j2.yml

      JSON

      com.fasterxml.jackson.core:jackson-databind

      log4j2.json + log4j2.jsn