Spring Boot 通过 spring-boot-starter-logging
自动配置日志系统:
@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
logging:
level:
root: WARN
com.example.order: DEBUG
org.hibernate.SQL: WARN
org.springframework.web: ERROR
级别优先级:TRACE < DEBUG < INFO < WARN < ERROR
# 基础配置
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>
<!-- 错误日志独立存储 -->
<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>
<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
# Logstash 配置示例
input {
tcp {
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["es-server:9200"]
index => "app-logs-%{+YYYY.MM.dd}"
}
}
// 通过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));
# 查看生效的日志配置
java -jar app.jar --debug | grep Logging
# 开启Logback内部日志
<configuration debug="true">
# 通过Actuator端点动态调整
curl -X POST http://localhost:8080/actuator/loggers/com.example \
-H "Content-Type: application/json" \
-d '{"configuredLevel":"DEBUG"}'
需先启用 actuator
依赖和 loggers
端点