一、Logback
-
在 Spring Boot 中,日志框架默认使用的是 Logback,Spring Boot 提供了对日志配置的简化
-
Spring Boot 默认会将日志输出到控制台,并且日志级别为 INFO
-
可以在
application.yaml
或application.properties
文件中进行日志配置 -
如果需要自定义日志配置,可以使用
logback-spring.xml
文件,Spring Boot 会自动加载该文件
二、日志级别
1、基本介绍
(1)INFO
-
一般信息,用于记录应用程序的运行状态
-
适用于记录应用程序的关键事件,例如,启动、关闭、重要配置加载等
-
用于提供足够信息,帮助了解应用状态,同时避免过多细节
(2)WARN
-
警告信息,表示潜在的问题
-
适用于记录潜在的问题,例如,配置不当、资源不足等,这些问题不会立即影响运行,但需关注
-
用于帮助发现并预防潜在问题
(3)ERROR
-
错误信息,表示发生了错误,但应用程序仍可运行
-
适用于记录严重错误,如数据库连接失败、关键业务逻辑异常等
-
用于快速定位和解决重大问题
(4)DEBUG
-
调试信息,用于开发阶段
-
适用于调试时,记录详细执行流程、变量值等
-
通常关闭,避免日志量过大,必要时可临时开启
(5)TRACE
-
最详细的日志信息,通常用于调试
-
适用于记录最详细的执行信息,用于深度调试
-
一般不开启,除非有特殊需求
2、小结
-
应选择合适的日志级别以确保既能捕获关键信息,又不会产生过多冗余日志
-
生产环境通常设置为 INFO
-
可根据需求调整特定包的日志级别,例如,将某些复杂模块设为 DEBUG
三、Spring Boot 自定义日志打印
1、配置文件
- 在
logback-spring.xml
文件中配置如下内容
xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 定义日志输出格式 -->
<property name="CONSOLE_PATTERN" value="[%-5p] %d{yyyy-MM-dd HH:mm:ss} - %m%n"/>
<property name="FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5p %logger{1}:%line - %m%n"/>
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_PATTERN}</pattern>
</encoder>
</appender>
<!-- 每日滚动文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>d:/my-logs/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>d:/my-logs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留历史日志文件的最大天数 -->
</rollingPolicy>
<encoder>
<pattern>${FILE_PATTERN}</pattern>
</encoder>
</appender>
<!-- 根日志配置 -->
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
2、测试代码
java
@Component
public class LogTest {
private static final Logger logger = LoggerFactory.getLogger(LogTest.class);
@PostConstruct
public void test1() {
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");
}
}
四、Spring Boot 自定义日志打印解读
1、配置文件
(1)定义日志输出格式
xml
<property name="CONSOLE_PATTERN" value="[%-5p] %d{yyyy-MM-dd HH:mm:ss} - %m%n"/>
<property name="FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5p %logger{1}:%line - %m%n"/>
CONSOLE_PATTERN
是控制台日志的输出格式
-
%-5p
:日志级别(例如,INFO、ERROR),左对齐,占 5 个字符 -
%d{yyyy-MM-dd HH:mm:ss}
:日志时间戳 -
%m
:日志消息 -
%n
:换行符输出示例
[INFO ] 2023-10-01 12:34:56 - This is a log message
FILE_PATTERN
是文件日志的输出格式。
-
%d{yyyy-MM-dd HH:mm:ss}
:日志时间戳 -
[%thread]
:当前线程名 -
%-5p
:日志级别 -
%logger{1}:%line
:日志记录器的名称(只显示最后一部分)和代码行号 -
%m
:日志消息 -
%n
:换行符输出示例
2023-10-01 12:34:56 [main] INFO com.example.MyClass:42 - This is a log message
(2)控制台输出配置
xml
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_PATTERN}</pattern>
</encoder>
</appender>
-
CONSOLE
:定义一个名为CONSOLE
的日志输出目标,输出到控制台 -
ConsoleAppender
:将日志输出到控制台 -
encoder
:定义日志的输出格式,使用前面定义的CONSOLE_PATTERN
(3)文件输出配置
xml
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>d:/my-logs/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>d:/my-logs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${FILE_PATTERN}</pattern>
</encoder>
</appender>
-
FILE
:定义一个名为FILE
的日志输出目标,输出到文件 -
RollingFileAppender
:支持日志文件滚动(按时间或大小分割) -
file
:当前日志文件的路径为d:/my-logs/application.log
-
rollingPolicy
:定义日志滚动策略 -
TimeBasedRollingPolicy
:按时间滚动日志文件 -
fileNamePattern
:滚动后的日志文件命名格式,例如application.2023-10-01.log
-
maxHistory
:保留最近 30 天的日志文件,超过 30 天的文件会被自动删除 -
encoder
:定义日志的输出格式,使用前面定义的FILE_PATTERN
(4)根日志配置
xml
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
-
root
:定义根日志记录器 -
level="info"
:设置日志级别为 INFO,即只记录 INFO 及以上级别(例如,WARN、ERROR)的日志 -
appender-ref
:将日志输出到CONSOLE
和FILE
两个目标
2、测试代码
(1)创建 Logger 实例
java
private static final Logger logger = LoggerFactory.getLogger(LogTest.class);
-
LoggerFactory 是 SLF4J 提供的工厂类,用于创建 Logger 实例
-
getLogger(LogTest.class)
方法会根据传入的类(LogTest.class
)创建一个与该类关联的 Logger 实例 -
日志输出时会自动带上类名(LogTest),方便定位日志来源
(2)打印日志
java
logger.debug("This is a debug message");
logger.info("This is an info message");
logger.warn("This is a warning message");
logger.error("This is an error message");