2012-12-07 94 views
7

我希望能够告诉JVM停止在执行链中的某个点记录某些级别的消息。在某些时候,我想只能用SEVERE级别的日志信息,所以我想这样做的:Java - 动态更改日志记录级别

for(Enumeration<String> loggerNames = logManager.getLoggerNames(); loggerNames.hasMoreElements();){ 
     String name = loggerNames.nextElement(); 
     Logger nextLogger = logManager.getLogger(name); 
     if(nextLogger != null) 
      nextLogger.setLevel(Level.SEVERE); 
    } 

有没有达到同样的逻辑,更清洁的方式,即设置一个全局变量,将停止印刷到日志中,除非严重?我需要区分控制台输出(在测试中)和活动中的文件输出,所以我可以在处理程序(控制台和文件)上设置这些级别?

+0

我想你需要一个java日志属性文件。 检查此http://www.javapractices.com/topic/TopicAction.do?Id=143 –

+1

不,我想使用DYNAMIC更改 – Bober02

回答

6

回答我的问题:

这正是我需要的:

Handler[] handlers = 
    Logger.getLogger("").getHandlers(); 
for (int index = 0; index < handlers.length; index++) { 
    handlers[index].setLevel(Level.SEVERE); 
} 
+0

这也适用于我。这种纯粹的java方法的优点是,我可以在groovy中做到这一点,当图书馆有默认级别的日志过多(我看着你的Apache SSHD)。 –

0

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

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

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

0

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

这可能工作:

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

或使用Logger.getParent()找到根记录

相关问题