Java日志框架:记录应用运行轨迹
Java日志框架:记录应用运行轨迹
概述
日志是应用开发中不可或缺的部分,它帮助开发者调试问题、监控应用状态和审计操作。Java提供了多种日志框架,其中Logback和SLF4J是最流行的组合。
1. SLF4J与Logback
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggingDemo {
private static final Logger logger = LoggerFactory.getLogger(LoggingDemo.class);
public static void main(String[] args) {
logger.trace("Trace级别日志");
logger.debug("Debug级别日志");
logger.info("Info级别日志");
logger.warn("Warn级别日志");
logger.error("Error级别日志");
}
}
2. Logback配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
3. 日志使用场景
public class OrderService {
private static final Logger logger = LoggerFactory.getLogger(OrderService.class);
public void processOrder(Order order) {
logger.info("开始处理订单: {}", order.getId());
try {
validateOrder(order);
saveOrder(order);
sendNotification(order);
logger.info("订单处理完成: {}", order.getId());
} catch (Exception e) {
logger.error("订单处理失败: {}", order.getId(), e);
throw e;
}
}
}
4. 日志级别
public class LogLevelDemo {
private static final Logger logger = LoggerFactory.getLogger(LogLevelDemo.class);
public static void main(String[] args) {
if (logger.isTraceEnabled()) {
logger.trace("详细跟踪信息");
}
if (logger.isDebugEnabled()) {
logger.debug("调试信息");
}
logger.info("一般信息");
logger.warn("警告信息");
logger.error("错误信息");
}
}
最佳实践
- 使用SLF4J:日志门面,便于切换实现
- 合理使用日志级别:生产环境使用INFO或WARN
- 避免字符串拼接:使用占位符{}
- 记录异常信息:logger.error("msg", exception)
- 敏感信息脱敏:避免记录密码等敏感信息
总结
日志是应用开发的重要组成部分,掌握SLF4J和Logback的使用,可以实现完善的日志管理。合理使用日志级别和格式,可以帮助开发者快速定位和解决问题。