第7章 日志配置与实践

443 阅读3分钟

任务描述

任务要求

使用IDEA开发工具构建一个项目多模块工程。study-springboot-chapter07学习关于Springboot集成常用日志框架

  1. 基于study-springboot工程,新建一个Maven项目,坐标groupId(com.cbitedu)、artifactId(study-springboot-chapter07),其他默认
  2. 继承study-springboot工程依赖

任务收获

  1. springboot整合log4j2日志框架
  2. springboot整合logback日志框架
  3.  springboot整合log4j2结合MDC实现全链路traceId
  4. 学会使用JUnit完成单元测试

任务准备

环境要求

  1. JDK1.8+
  2. MySQL8.0.27+
  3. Maven 3.6.1+
  4. IDEA/VSCode

工程目录要求

image.png

任务实施

仓库地址:admin@code.creatorblue.com/r/java/stud…

模块:study-springboot-chapter07

logback简介

Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。

  默认情况下,SpringBoot会用Logback来记录日志,并用INFO级别输出到控制台。在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了。

  日志输出内容元素具体如下

  • 时间日期:精确到毫秒。

  • 日志级别:ERROR, WARN, INFO, DEBUG or TRACE。

    日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。
    Spring Boot中默认配置ERRORWARNINFO级别的日志输出到控制台。

  • 进程ID

  • 分隔符:--- 标识实际日志的开始。

  • 线程名:方括号括起来(可能会截断控制台输出)。

  • Logger名:通常使用源代码的类名。

  • 日志内容

任务实施步骤如下:

1、 改造study-springboot-chapter00标准项目,springboot默认使用logback日志框架

添加Logback依赖:如果要使用Logback,原则上是需要添加spring-boot-starter-logging依赖的,不加入也可以,因为spring-boot-starter-web依赖中包含了spring-boot-starter-logging依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

2、配置application.[yml、properties]文件

如果无需复杂的日志配置,执行简单设置日志打印级别,打印方式可直接再application.[yml、properties]中配置。

logging:
  file:
    ##该属性用来配置日志文件的路径
    path: log
    ##root日志输出级别
  level:
    root: INFO

3、新建logback-spring.xml文件内容如下

虽然SpringBoot是要消灭xml的,但是有些复杂功能还是得编写 xml。使用xml后要将application.[yml、properties]中的配置去掉,避免冲突。

  根据不同的日志系统,按照指定的规则组织配置文件名,并放在resources目录下,就能自动被SpringBoot加载

  • Logback:logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy。
  • Log4j:log4j-spring.properties、log4j-spring.xml、log4j.properties、log4j.xml。
  • Log4j2:log4j2-spring.xml、log4j2.xml。
  • JDK (Java Util Logging) :logging.properties。

resources文件夹下创建logbck-spring.xml文件,文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 控制台打印日志的相关配置 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%level] - %m%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>log/mybatisplus_info.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>log/mybatisplus_info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>log/mybatisplus_error.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>log/mybatisplus_error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="file" />
        <appender-ref ref="error" />
    </root>
</configuration>

4、如果自定义日志配置文件:在yml文件中增加logging.config指定配置文件地址,命名为logback时可以不需要配置,SpringBoot`会自动查找。level设置指定路径下的日志输出级别。

logging:
  config: classpath:logback.xml
  level:
    com:
      springboot: debug

实验实训

  1. springboot整合log4j2日志框架