首页 > Java > Spring Boot 日志全攻略:从基础配置到生产级实践

Spring Boot 日志全攻略:从基础配置到生产级实践

2025-05-01 17:48:36

一、5分钟搭建日志系统

1.1 自动配置原理

Spring Boot 通过 spring-boot-starter-logging 自动配置日志系统:

  • Logback 作为默认实现
  • 控制台输出 + 文件输出
  • 预设合理的日志格式和级别

1.2 基础代码示例

@RestController
public class OrderController {
    // 经典创建方式
    private static final Logger logger = LoggerFactory.getLogger(OrderController.class);
    
    @GetMapping("/order")
    public String createOrder() {
        logger.debug("订单创建流程启动"); // 默认不显示
        logger.info("收到新订单请求,订单ID:{}", orderId);
        logger.error("库存校验失败", exception);
        return "success";
    }
}

关键点说明

  • 使用 SLF4J 门面模式
  • 参数化日志写法(避免字符串拼接开销)
  • 默认输出级别:INFO

二、配置进阶:精准控制日志行为

2.1 级别控制(application.yml)

logging:
  level:
    root: WARN
    com.example.order: DEBUG
    org.hibernate.SQL: WARN
    org.springframework.web: ERROR

级别优先级:TRACE < DEBUG < INFO < WARN < ERROR

2.2 文件输出策略

# 基础配置
logging.file.name=logs/app.log
logging.file.max-size=50MB
logging.file.max-history=30

# 高级配置(logback-spring.xml)
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>${LOG_DIR}/app-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
    <maxFileSize>100MB</maxFileSize>
    <maxHistory>60</maxHistory>
    <totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>

三、生产级日志架构设计

3.1 日志分级存储方案

<!-- 错误日志独立存储 -->
<appender name="ERROR_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>ERROR</level>
    </filter>
    <file>${LOG_DIR}/error.log</file>
</appender>

<!-- 审计日志独立通道 -->
<appender name="AUDIT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="com.example.AuditLogFilter"/>
</appender>

3.2 异步日志性能优化

<appender name="ASYNC_APPENDER" class="ch.qos.logback.classic.AsyncAppender">
    <queueSize>1024</queueSize>
    <discardingThreshold>0</discardingThreshold>
    <appender-ref ref="FILE_APPENDER" />
</appender>

配置要点

  • 队列容量:1024-4096(根据业务量调整)
  • 丢弃阈值:0表示队列满时阻塞
  • 不要混合异步和同步Appender

四、云原生日志方案集成

4.1 ELK Stack 集成

# Logstash 配置示例
input {
    tcp {
        port => 4560
        codec => json_lines
    }
}

output {
    elasticsearch {
        hosts => ["es-server:9200"]
        index => "app-logs-%{+YYYY.MM.dd}"
    }
}

4.2 阿里云日志服务(SLS)接入

// 通过SDK直接上报
Logger logger = LoggerFactory.getLogger("sls-logger");
Map<String, String> content = new HashMap<>();
content.put("method", "createOrder");
content.put("cost", "56ms");
logger.info(JSON.toJSONString(content));

五、诊断与调试技巧

5.1 配置问题排查

# 查看生效的日志配置
java -jar app.jar --debug | grep Logging

# 开启Logback内部日志
<configuration debug="true">

5.2 动态调整日志级别

# 通过Actuator端点动态调整
curl -X POST http://localhost:8080/actuator/loggers/com.example \
-H "Content-Type: application/json" \
-d '{"configuredLevel":"DEBUG"}'

需先启用 actuator 依赖和 loggers 端点


六、最佳实践清单

  1. 日志分级:ERROR/WARN级别日志必须包含上下文信息
  2. 敏感信息:禁止记录密码、密钥等敏感数据
  3. 格式规范:统一采用JSON格式便于解析
  4. 采样机制:对DEBUG日志进行采样避免性能问题
  5. 监控报警:ERROR日志接入监控系统实时报警
  6. 日志清理:设置自动归档和删除策略

 

使用 Ctrl+D 可将网站添加到书签
收藏网站
扫描二维码
关注早实习微信公众号
官方公众号
Top