我希望能够告诉JVM在执行链中的某个点停止记录某些级别的消息。在某些时候,我只想记录SEVERE
级别的消息,所以我想这样做:
for(Enumeration<String> loggerNames = logManager.getLoggerNames(); loggerNames.hasMoreElements();){
String name = loggerNames.nextElement();
Logger nextLogger = logManager.getLogger(name);
if(nextLogger != null)
nextLogger.setLevel(Level.SEVERE);
}
是否有更简洁的方法来实现相同的逻辑,即设置一个全局变量,停止打印到日志,除非SEVERE?我需要区分控制台输出(在测试中)和实时文件输出,所以我可以在处理程序(控制台和文件)上设置这些级别?
答案 0 :(得分:6)
回答我自己的问题:
这正是我所需要的:
Handler[] handlers =
Logger.getLogger( "" ).getHandlers();
for ( int index = 0; index < handlers.length; index++ ) {
handlers[index].setLevel( Level.SEVERE);
}
答案 1 :(得分:2)
要动态控制应用程序配置,常用的方法是使用JMX。
作为jdk的一部分,JConsole允许您手动控制MBean,但您也可以以编程方式访问它们。您可以使用JMX来控制MBean,如this page。
中所述答案 2 :(得分:0)
使用log4j,您可以更改根记录器的级别。
这可能有效:
logManager.getLogger( "" ).setLevel(Level.SEVERE);
或使用Logger.getParent()
查找根记录器