温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Logger 日志记录器如何排查

发布时间:2026-10-03 03:09:34 来源:亿速云 阅读:91 作者:小樊 栏目:编程语言

在 Java 中排查 Logger(日志记录器)不输出、级别不对、配置不生效 等问题,通常可以按下面系统化的思路来定位。下面以 java.util.logging(JUL)、Log4j2、Logback 三种常见日志框架为例说明。


一、先确认你用的是哪个日志框架

不同框架排查方式完全不同:

// 常见日志 API
import java.util.logging.Logger;      // JUL
import org.slf4j.Logger;              // SLF4J
import org.apache.logging.log4j.Logger; // Log4j2

快速判断:

  • java.util.logging → JDK 自带
  • log4j、log4j2.xml → Log4j / Log4j2
  • logback.xml → Logback
  • application.yml + Spring Boot → 通常 Logback / Log4j2

二、通用排查清单(必看)

1️⃣ 确认 Logger 对象是否正确

Logger logger = Logger.getLogger("com.example.demo");

常见问题:

  • 包名 / 类名写错
  • 用了不同名字的 Logger(配置不匹配)

✅ 建议:

private static final Logger logger = LoggerFactory.getLogger(XX.class);

2️⃣ 确认日志级别是否生效

JUL

logger.setLevel(Level.FINE);

Log4j2 / Logback

<Logger name="com.example" level="debug"/>

⚠️ 注意:

  • Root Logger 级别 会覆盖子 Logger
  • 控制台 handler 也有级别限制

3️⃣ 确认是否有 Handler / Appender

JUL 常见问题

logger.addHandler(new ConsoleHandler());

如果:

  • 没有 Handler → 不输出
  • Handler 级别高于 Logger → 不输出

检查:

Logger.getLogger("").getHandlers();

4️⃣ 配置文件是否真的被加载

常见坑:

  • 配置文件放错目录
  • 文件名写错
  • 被 classpath 中其他配置覆盖

常见位置

框架 配置文件
JUL logging.properties
Log4j2 log4j2.xml
Logback logback.xml

启动时加参数确认:

-Djava.util.logging.config.file=logging.properties

5️⃣ 开启日志框架自身调试

Log4j2

-Dlog4j2.debug=true

Logback

-Dlogback.debug=true

会打印:

  • 配置文件加载路径
  • 哪个 logger 用了什么级别
  • appender 是否注册

三、Spring Boot 项目专项排查

1️⃣ 查看实际生效配置

java -jar app.jar --debug

或:

logging:
  level:
    com.example: debug

2️⃣ Spring Boot 日志桥接问题

常见冲突:

  • log4j + log4j-over-slf4j
  • jul-to-slf4j

✅ 正确组合:

slf4j-api
logback-classic

或

slf4j-api
log4j-slf4j-impl
log4j-core

四、常见“不打印日志”的真实原因汇总

✅ 级别过高(INFO 但代码 debug)
✅ Root Logger 覆盖
✅ Handler / Appender 没加
✅ 配置文件没加载
✅ 多日志框架冲突
✅ 日志被异步队列吞掉(AsyncAppender)
✅ 生产环境 stdout 被重定向


五、快速自测代码(JUL 示例)

Logger logger = Logger.getLogger("test");
logger.setLevel(Level.FINE);
logger.addHandler(new ConsoleHandler());
logger.getHandlers()[0].setLevel(Level.FINE);

logger.fine("fine log");
logger.info("info log");

六、如果你愿意,可以直接贴出

  • 用的日志框架
  • 配置文件
  • 创建 Logger 的代码
  • 启动方式(Spring Boot?普通 Java?)

我可以直接帮你定位是哪一步出问题。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手