如何使用java.util.logging输出调试日志?替换log4j debug方法遇阻
解决java.util.logging替代log4j调试日志的问题
1. 对应级别映射
log4j的debug()对应java.util.logging(简称JUL)的Level.FINE级别,另外还有Level.FINER、Level.FINEST两个更细分的调试级别,可根据日志粒度需求选择。
2. 调试日志的写法
获取Logger实例后,直接调用对应级别的方法即可:
// 获取当前类的Logger实例 Logger logger = Logger.getLogger(YourClassName.class.getName()); // 对应log4j的log.debug("msg") logger.fine("调试信息"); // 更细粒度的调试输出 logger.finer("详细调试信息"); logger.finest("最细节的调试信息");
也可以用通用log()方法指定级别:
logger.log(Level.FINE, "调试信息");
3. 关键:调整日志级别配置
JUL默认日志级别为INFO,会自动过滤FINE及以下的日志,必须调整Logger和处理器的级别才能输出调试内容:
方式一:代码动态设置
// 设置当前类Logger的级别为FINE logger.setLevel(Level.FINE); // 确保根Logger级别不高于FINE(否则会被上层过滤) Logger rootLogger = Logger.getLogger(""); rootLogger.setLevel(Level.FINE); // 调整控制台处理器的级别(默认控制台处理器级别为INFO) for (Handler handler : rootLogger.getHandlers()) { if (handler instanceof ConsoleHandler) { handler.setLevel(Level.FINE); } }
方式二:配置文件设置
创建logging.properties文件,示例内容:
# 指定日志处理器(这里用控制台输出) handlers=java.util.logging.ConsoleHandler # 设置根Logger级别为FINE .level=FINE # 设置控制台处理器级别为FINE(必须与根级别匹配或更低) java.util.logging.ConsoleHandler.level=FINE # 可选:设置日志格式 java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
启动程序时指定配置文件路径:
java -Djava.util.logging.config.file=./logging.properties YourMainClass
注意事项
- IDE运行时需确认没有覆盖JUL的默认配置;
- 若使用文件处理器等其他处理器,需单独设置对应级别;
- 级别对应关系:JUL的
FINE=log4j的DEBUG,INFO=log4j的INFO,需理清对应逻辑避免配置错误。
内容的提问来源于stack exchange,提问作者Giacomo9o
相关产品推荐
相关产品推荐

