一、业务需求
日志级别的分类
日志的级别分为:
- trace:微量,少许的意思,级别最低
- info:普通的打印信息
- debug:需要调试时候的关键信息打印
- warn:警告,不影响使⽤,但需要注意的问题
- error:错误信息,级别较⾼的错误日志信息
- fatal:致命的,因为代码异常导致程序退出执行的事件
日志级别的顺序:


Spring Boot 默认的日志级别
Root Logger 级别: INFO
- 这意味着默认会输出 INFO、WARN 和 ERROR 级别的日志
- DEBUG 和 TRACE 级别的日志默认不会输出
Spring Boot 相关包的默认级别:
- org.springframework.boot: INFO
- org.springframework.web: INFO
- org.springframework.security: INFO
第三方库的默认级别:
- 大多数第三方库默认也是 INFO 级别
二、实现
只在文件内部使用,实现步骤:
①编写继承了ch.qos.logback.classic.pattern.ClassicConverter类的方法
②重写convert()方法,将需要用到的变量返回即可
③在xml配置文件中引入,并使用
package net.company.springboot.logback.classic;
import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
public class TraceConverter extends ClassicConverter {
public TraceConverter() {
}
public String convert(ILoggingEvent event) {
String traceId = TraceContext.traceId();
return null != traceId ? traceId : "-";
}
}
logback高级特性使用
项目的 resources 资源目录下新建 logback 日志配置文件(logback.xml )
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false">
<!-- 获取 traceId 配置类-->
<conversionRule conversionWord="trace" converterClass="net.company.springboot.logback.classic.TraceConverter"/>
<!-- 自定义 logback 日志格式-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}|%level|%trace|[%thread] %logger{36} -%msg%n</Pattern>
</encoder>
</appender>
<root level="info">
<!-- 控制台打印 -->
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
多环境配置
在一个基于Spring boot开发的项目里,常常需要有多套环境的配置:开发,测试以及产品。使用springProfile 可以分别配置开发(dev),测试(test)以及生产(prod)等不同的环境
<!-- 开发环境和测试环境 -->
<springProfile name="dev,test">
<logger name="com.atguigu" level="INFO">
<appender-ref ref="CONSOLE" />
</logger>
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
<logger name="com.atguigu" level="ERROR">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</logger>
</springProfile>
异步日志记录
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE"/>
<queueSize>1024</queueSize>
<discardingThreshold>0</discardingThreshold>
</appender>
条件化配置
<if condition='property("spring.profiles.active").equals("prod")'>
<then>
<root level="WARN">
<appender-ref ref="FILE"/>
</root>
</then>
<else>
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
</root>
</else>
</if>
MDC
用于在日志中添加上下文信息,例如用户ID、请求ID等:
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level [%X{userId}] %logger{36} - %msg%n</pattern>
日志轮转策略
基于时间和大小的轮转策略
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>logs/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
过滤器使用
可以配置阈值过滤器或自定义过滤器
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<file>logs/application.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
打印sql日志
logging:
config: classpath:logback.xml
level:
net:
company:
test:
dao:
mapper: debug #mapper层 sql日志 DEBUG级别输出
关闭自动配置日志
日志输出包含 Did not match: - @ConditionalOnClass did not find required class
logging:
level:
org.springframework.boot.autoconfigure: ERROR
org.springframework.boot.autoconfigure 包只输出 ERROR 级别日志
文章介绍了日志的不同级别,如trace、info、debug、warn、error和fatal,并展示了如何在Springboot项目中创建自定义的日志转换器,用于在logback配置中获取和显示traceId。同时,文中还提到了多环境配置,如开发、测试和生产环境的logback设置,以及如何针对不同环境调整日志级别。此外,还提及了mapper层SQL日志的DEBUG级别输出配置。
369

被折叠的 条评论
为什么被折叠?



