Java 中 java.util.logging.Logger(JUL)“不输出日志”是一个非常常见的问题,通常不是代码没执行,而是配置/级别/Handler没弄对。下面按最常见原因逐一说明。
Logger logger = Logger.getLogger("test");
logger.info("hello");
如果全局或该 logger 的级别是 WARNING:
.level= WARNING
那么 info、config、fine 都不会输出。
✅ 解决:
logger.setLevel(Level.INFO);
Logger 本身不负责输出,真正输出的是 Handler。
如果 logger 没有 Handler,也没有父 Logger 的 Handler:
Logger logger = Logger.getLogger("com.xxx");
// 没有 Handler → 什么都不输出
✅ 解决:
Logger logger = Logger.getLogger("com.xxx");
logger.setUseParentHandlers(true); // 默认是 true
logger.addHandler(new ConsoleHandler());
即使 Logger 是 INFO:
ConsoleHandler handler = new ConsoleHandler();
handler.setLevel(Level.WARNING);
INFO 日志仍然不会输出。
✅ 解决:
handler.setLevel(Level.INFO);
JUL 默认日志来自 root logger。
如果你写了:
Logger.getLogger("").setLevel(Level.OFF);
那所有日志都没了。
✅ 检查:
Logger.getLogger("").getLevel();
JUL 默认读取:
$JAVA_HOME/jre/lib/logging.properties
或你指定:
-Djava.util.logging.config.file=logging.properties
常见问题:
示例:
handlers= java.util.logging.ConsoleHandler
.level= INFO
java.util.logging.ConsoleHandler.level = INFO
com.example.level = DEBUG
例如:
你可能以为用的是 JUL,其实不是。
✅ 确认:
System.out.println(logger.getClass());
try {
logger.info("start");
} catch (Exception e) {
// 啥都没做
}
Logger logger = Logger.getLogger("test");
logger.setLevel(Level.INFO);
logger.addHandler(new ConsoleHandler());
logger.setUseParentHandlers(false);
logger.info("能看到了吗?");
如果这一句能输出,说明前面是配置问题。
你可以贴:
我可以直接告诉你是哪一行导致没输出。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。