一、日志框架选择
1. 主流框架对比
框架 | 特点 | Spring Boot 默认支持 |
---|---|---|
Logback | - 性能优异,Spring Boot 默认集成 - 支持自动热更新配置文件 | ✅ (默认) |
Log4j2 | - 异步日志性能更强 - 支持插件扩展 - 防范漏洞能力更好 | ❌ (需手动配置) |
JUL (JDK自带) | - 无需额外依赖 - 功能简单,性能较差 | ❌ |
2. 切换日志框架
切换为 Log4j2:
<!-- pom.xml 排除默认日志框架 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加 Log4j2 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
二、日志配置详解
1. 基础配置(application.yml)
logging:
level:
root: INFO # 全局日志级别
org.springframework: WARN
com.example: DEBUG # 指定包日志级别
file:
name: logs/app.log # 日志文件路径
max-size: 10MB # 单个文件最大尺寸
max-history: 30 # 保留最近30天日志
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
file: "%d %-5level [%thread] %logger{36} - %msg%n"
2. 高级配置(logback-spring.xml)
<!-- 自定义滚动策略 -->
<configuration>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>logs/archived/app-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d %level [%thread] %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<!-- 按环境激活配置 -->
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="ROLLING"/>
</root>
</springProfile>
</configuration>
三、日志级别管理
1. 级别定义
级别 | 使用场景 |
---|---|
TRACE | 最细粒度调试信息(如方法入参) |
DEBUG | 开发阶段问题排查(如SQL语句、流程状态) |
INFO | 关键业务流程节点(如服务启动、事务提交) |
WARN | 潜在问题警告(如缓存穿透、非核心服务超时) |
ERROR | 系统错误(如数据库连接失败、空指针异常) |
2. 动态调整
通过 Actuator 实时修改日志级别(需先添加依赖):
# 查看当前级别
curl http://localhost:8080/actuator/loggers/com.example
# 动态修改级别为DEBUG
curl -X POST -H "Content-Type: application/json" -d '{"configuredLevel":"DEBUG"}' http://localhost:8080/actuator/loggers/com.example
四、日志文件管理策略
1. 滚动策略配置
logging:
logback:
rollingpolicy:
max-file-size: 10MB # 单个文件最大尺寸
total-size-cap: 1GB # 所有日志总大小限制
clean-history-on-start: true # 启动时清理旧日志
2. 日志归档方案
策略 | 优点 | 缺点 |
---|---|---|
按时间滚动 | 方便按日期检索日志 | 突发流量可能产生大文件 |
按大小滚动 | 保证单个文件大小可控 | 需要定期清理旧文件 |
混合策略(推荐) | 平衡时间与大小管理 | 配置复杂度略高 |
五、最佳实践
1. 日志规范
java">// 错误示例:模糊的日志信息
log.info("Processing request");
// 正确示例:结构化日志
log.info("Order processed [orderId={}, status={}]", orderId, status);
2. 敏感信息过滤
java">// 使用脱敏工具类
log.debug("User login: username={}, ip={}",
SensitiveUtils.maskUsername(username),
SensitiveUtils.maskIp(ipAddress));
3. 异步日志提升性能
<!-- logback-spring.xml 配置异步日志 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>1024</queueSize>
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="ROLLING"/>
</appender>
六、常见问题排查
1. 日志不输出
- 检查
logging.level.root
是否设置过高 - 确认配置文件路径正确(默认查找
classpath:logback-spring.xml
) - 检查是否有多个日志框架冲突
2. 日志文件不滚动
- 确认磁盘空间充足
- 检查滚动策略中的
maxFileSize
和maxHistory
配置 - 确保应用有文件写入权限
通过合理配置日志系统,可以实现:
- 生产环境:ERROR/WARN 级别日志 + 滚动归档
- 测试环境:INFO 级别日志 + 异步写入
- 开发环境:DEBUG 级别日志 + 控制台输出
完整示例代码参考:Spring Boot Logging Demo