在 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 / Log4j2logback.xml → Logbackapplication.yml + Spring Boot → 通常 Logback / Log4j2Logger logger = Logger.getLogger("com.example.demo");
常见问题:
✅ 建议:
private static final Logger logger = LoggerFactory.getLogger(XX.class);
logger.setLevel(Level.FINE);
<Logger name="com.example" level="debug"/>
⚠️ 注意:
logger.addHandler(new ConsoleHandler());
如果:
检查:
Logger.getLogger("").getHandlers();
常见坑:
| 框架 | 配置文件 |
|---|---|
| JUL | logging.properties |
| Log4j2 | log4j2.xml |
| Logback | logback.xml |
启动时加参数确认:
-Djava.util.logging.config.file=logging.properties
-Dlog4j2.debug=true
-Dlogback.debug=true
会打印:
java -jar app.jar --debug
或:
logging:
level:
com.example: debug
常见冲突:
log4j + log4j-over-slf4jjul-to-slf4j✅ 正确组合:
slf4j-api
logback-classic
或
slf4j-api
log4j-slf4j-impl
log4j-core
✅ 级别过高(INFO 但代码 debug)
✅ Root Logger 覆盖
✅ Handler / Appender 没加
✅ 配置文件没加载
✅ 多日志框架冲突
✅ 日志被异步队列吞掉(AsyncAppender)
✅ 生产环境 stdout 被重定向
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");
我可以直接帮你定位是哪一步出问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。