应使用slf4j+logback/log4j2组合,按trace/debug/info/warn/error语义分级打印,用{}占位符、异常作最后参数、条件日志避免无效计算,并通过配置文件管控级别、输出目标与敏感信息脱敏。

在 Java 中正确打印不同级别的日志信息,核心是使用成熟日志框架(如 SLF4J + Logback 或 Log4j2),避免直接用 System.out.println,并按语义合理选择日志级别(TRACE、DEBUG、INFO、WARN、ERROR),同时注意参数占位符、异常处理和性能开销。
选用标准日志门面 + 实现组合
推荐使用 SLF4J 作为日志门面(统一 API),搭配 Logback(默认原生支持)或 Log4j2 作为底层实现:
- 添加 Maven 依赖(以 Logback 为例):
org.slf4j
slf4j-api
2.0.13
ch.qos.logback
logback-classic
1.4.14 - 在类中获取 Logger:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UserService {
private static final Logger log = LoggerFactory.getLogger(UserService.class);
// ……
按语义选择日志级别,不滥用 INFO 或 ERROR
每个级别有明确用途,错误使用会降低日志可读性和排查效率:
-
TRACE:极细粒度,如方法入参、循环内单次处理详情;仅调试开启(默认关闭)
log.trace("Entering method processUser with id={}", userId); -
DEBUG:开发/测试阶段关键中间状态,如 SQL 参数、缓存命中结果
log.debug("Cache hit for user key: {}", cacheKey); -
INFO:系统正常运行的关键节点,如服务启动、定时任务开始/完成、重要业务动作(用户注册成功)
log.info("User {} registered successfully, email verified: {}", userId, isEmailVerified); -
WARN:潜在问题但不影响主流程,如配置缺失回退、接口降级、数据格式兼容性警告
log.warn("Fallback to default timeout config since 'api.timeout' not found"); -
ERROR:发生异常且业务逻辑无法继续,必须记录完整上下文和堆栈
log.error("Failed to send notification to user {}", userId, e); // 异常对象放最后
正确写法:用占位符、避免字符串拼接、异常要传参
提升性能与可读性,尤其在日志被禁用时避免无效计算:
- ✅ 推荐:用
{}占位符,SLF4J 自动判断是否需格式化
log.debug("Processing order {} with status {}", orderId, status); - ❌ 避免:字符串拼接(即使日志级别关闭,拼接仍执行)
// 错误示例
log.debug("Processing order " + orderId + " with status " + status); - ✅ 记录异常:把
Throwable作为最后一个参数,自动输出堆栈
try { ... } catch (IOException e) {
log.error("I/O error reading config file", e);
} - ✅ 条件日志:复杂表达式先判断再打日志,避免无谓构造
if (log.isDebugEnabled()) {
log.debug("Expensive object state: {}", buildDebugInfo()); // buildDebugInfo() 只在 DEBUG 开启时调用
}
生产环境配置建议
通过配置文件(如 logback-spring.xml)控制行为:
- 设置根日志级别为
INFO,对特定包调高(如com.example.service=DEBUG)便于问题定位 - 区分输出目标:控制台(开发)+ 滚动文件(生产),并包含时间、线程名、类名、行号等上下文
- 敏感信息脱敏:避免直接打印密码、手机号、身份证号,可用工具类预处理
- 异步日志(Logback AsyncAppender / Log4j2 AsyncLogger)降低 I/O 对主线程影响
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











