8

我希望能够告诉 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);
    }

有没有更简洁的方法来实现相同的逻辑,即设置一个全局变量,除非严重,否则它将停止打印到日志?我需要区分控制台输出(测试中)和实时文件输出,所以我可以在处理程序(控制台和文件)上设置这些级别?

4

3 回答 3

7

回答我自己的问题:

这正是我所需要的:

Handler[] handlers =
  Logger.getLogger( "" ).getHandlers();
for ( int index = 0; index < handlers.length; index++ ) {
  handlers[index].setLevel( Level.SEVERE);
}
于 2012-12-07T10:53:36.740 回答
2

要动态控制您的应用程序配置,一种常见的方法是使用 JMX。

JConsole 是 jdk 的一部分,允许您手动控制 MBean,但您也可以通过编程方式访问它们。

您可以使用 JMX 来控制 MBean,如本页中所述。

于 2012-12-07T10:00:11.750 回答
0

使用 log4j,您可以更改根记录器的级别。

这可能有效:

logManager.getLogger( "" ).setLevel(Level.SEVERE);

或用于Logger.getParent()查找根记录器

于 2012-12-07T10:41:49.067 回答