日志
Spring Boot 日志配置与使用教程
日志是应用程序开发中不可或缺的部分,Spring Boot 提供了强大的日志支持。本教程将详细介绍 Spring Boot 中的日志配置和使用方法。
一、Spring Boot 日志基础
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RestController
public class MyController {
private static final Logger logger = LoggerFactory.getLogger(MyController.class);
@GetMapping("/test")
public String test() {
logger.trace("This is a TRACE message");
logger.debug("This is a DEBUG message");
logger.info("This is an INFO message");
logger.warn("This is a WARN message");
logger.error("This is an ERROR message");
return "Check the logs!";
}
}
二、日志级别
- 日志级别分类
从低到高依次为:
• TRACE
• DEBUG
• INFO
• WARN
• ERROR
• OFF(关闭日志)
- 配置日志级别
在application.properties
或application.yml
中配置:
# 设置root日志级别
logging.level.root=WARN
# 设置特定包的日志级别
logging.level.com.example.demo=DEBUG
logging.level.org.springframework.web=INFO
YAML 格式:
logging:
level:
root: WARN
com.example.demo: DEBUG
org.springframework.web: INFO
三、日志输出配置
- 输出到文件
# 输出日志到文件 logging.file.name=myapp.log
或者使用path(目录+固定文件名spring.log)
logging.file.path=/var/logs
2. 日志文件滚动策略
```properties
# 日志文件最大大小
logging.logback.rollingpolicy.max-file-size=10MB
# 保留的日志文件数量
logging.logback.rollingpolicy.max-history=7
# 日志文件名称模式
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
- 控制台输出格式
# 控制台输出模式 logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
文件输出模式
logging.pattern.file=%d{yyyy-MM-dd HHss} [%thread] %-5level %logger{36} - %msg%n
四、高级配置
1. 使用 logback-spring.xml
在 `resources` 目录下创建 `logback-spring.xml` 文件:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_FILE}</file>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<logger name="com.example.demo" level="DEBUG"/>
</configuration>
- 按环境配置日志
在logback-spring.xml
中使用 Spring Profile:
<springProfile name="dev">
<logger name="com.example.demo" level="DEBUG"/>
</springProfile>
<springProfile name="prod">
<logger name="com.example.demo" level="INFO"/>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</springProfile>
五、日志最佳实践
合理使用日志级别:
• TRACE: 非常详细的调试信息• DEBUG: 调试信息
• INFO: 重要的业务过程信息
• WARN: 潜在问题
• ERROR: 错误信息,需要关注
日志内容规范:
• 包含足够的上下文信息• 避免记录敏感信息(密码、密钥等)
• 使用占位符而不是字符串拼接:
logger.debug("User {} logged in", username)
性能考虑:
• 在高频调用的代码中避免不必要的日志• 使用
isDebugEnabled()
检查(对于复杂日志消息)
if (logger.isDebugEnabled()) {
logger.debug("Expensive log message: {}", expensiveOperation());
}
六、与其他日志框架集成
- 使用 Log4j2
在pom.xml
中排除 Logback 并添加 Log4j2:
<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-spring.xml
配置文件。
- 使用 JUL (java.util.logging)
Spring Boot 也支持 JUL,但不推荐,因为功能较弱。
七、日志监控与管理
Spring Boot Actuator 日志端点:
添加依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
配置:
management.endpoints.web.exposure.include=loggers
访问
/actuator/loggers
查看和修改日志级别集成 ELK 或 Splunk 进行日志集中管理
八、常见问题解决
日志不输出:
• 检查日志级别配置• 检查是否有多个日志框架冲突
日志文件不滚动:
• 检查文件大小限制配置• 检查文件权限
日志格式不生效:
• 确保没有多个配置文件冲突• 检查配置文件名是否正确
通过本教程,你应该能够掌握 Spring Boot 中的日志配置和使用方法,为你的应用程序实现完善的日志记录功能。