我有一个应用程序,我希望将日志记录级别设置为INFO
,除非设置了调试模式,在这种情况下我想将级别设置为FINEST
。
如果我在属性文件中设置了级别,它也不会使用logger.setLevel(Level.FINEST)
从程序中覆盖,如果我没有为属性文件中的.level
字段设置任何内容,默认情况下如果是isDebugEnable(),我将无法覆盖以使用FINEST
。
如何根据条件对此级别进行配置?
try(InputStream configFile = getClass().getClassLoader().getResourceAsStream("logging.properties")) {
LogManager.getLogManager().readConfiguration(configFile);
} catch (IOException e) {
throw new IllegalStateException("Unable to load default logging properties.", e);
}
if (isDebugEnabled()) {
logger.setLevel(Level.FINEST);
} else {
logger.setLevel(Level.INFO);
}
我的配置文件如下:
handlers= java.util.logging.ConsoleHandler
.level= INFO
# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
# Enable console to set level to FINEST and above.
java.util.logging.ConsoleHandler.level = FINEST
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
我可以使用如下方式执行此操作,但想知道是否有更好的方法来执行此操作。 (可能正在使用属性文件)
ConsoleHandler consoleHandler = new ConsoleHandler();
setLogLevel();
consoleHandler.setLevel(Level.FINEST);
logger.addHandler(new ConsoleHandler());
答案 0 :(得分:2)
如果您在启动JVM之前设置DEBUG
选项,则只需打包名为logging.properties
的第二个debug.properties
文件,并将java.util.logging.config.file
更改为指向{{ 1}}当你想要调试选项时。
debug.properties
如果您必须在运行时设置级别,则会遇到readConfiguration not resetting all everything after boot of the JVM的问题。在JDK 8或更早版本中,您可以调用handlers= java.util.logging.ConsoleHandler
.level= FINEST
# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.level = ALL
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
# Enable console to set level to show all levels.
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
来填充默认值并添加更多代码来修复损坏的行为。由于您只需要在处理程序上设置级别,然后只需添加该代码。
readConfiguration
JDK 9提供了try(InputStream configFile = getClass().getClassLoader().getResourceAsStream("logging.properties")) {
LogManager.getLogManager().readConfiguration(configFile);
} catch (IOException e) {
throw new IllegalStateException("Unable to load default logging properties.", e);
}
Level lvl;
if (isDebugEnabled()) {
lvl = Level.FINEST;
} else {
lvl = Level.INFO;
}
logger.setLevel(lvl);
for(Handler h : logger.getHandlers()) {
h.setLevel(lvl);
}
方法,可以解决updateConfiguration
方法的破坏行为。