【问题标题】:How to get loggers in java.util.logging so i can change their log level at runtime?如何在 java.util.logging 中获取记录器,以便我可以在运行时更改它们的日志级别?
【发布时间】:2015-04-14 17:40:41
【问题描述】:

我在不同的课程中使用java.util.logging。日志级别的默认值为INFO。例如在一个类Class1 中是这样设置的:

import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Class1 {
   private static final Logger LOGGER = Logger.getLogger(Class1.class.getName());
   static {
       LOGGER.setLevel(Level.INFO);
       for (Handler handler : LOGGER.getHandlers()) {
           handler.setLevel(Level.INFO);
       }           
   }
   ...
}

以上是在不同类中设置的相同方式。

现在可以在运行时更改日志级别。例如假设它在运行时更改为FINEST。在这种情况下,我想获取到目前为止已创建的所有记录器,然后将它们的日志级别更改为FINEST。我怎样才能做到这一点?我正在考虑创建另一个类说LogRepository,它有一个java.util.List,每当创建一个LOGGER时,我将它添加到LogRepositoryjava.util.List中。但我认为可能还有另一种更好的方法。

【问题讨论】:

  • 您是否正在尝试实现 Log4j 的 LoggerRepository 类未完成的任务,如下所述:logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/spi/…
  • 我没有使用过 Log4j,但查看您的链接,我同意我正在寻找类似 @​​987654332@ 方法的 java.util.logging 方面的方法。为什么您在评论中说未完成

标签: java logging java.util.logging


【解决方案1】:

我相信这只是设置所有实例继承自的父记录器级别的问题。

Logger.getLogger("").setLevel(Level.FINEST);

【讨论】:

  • 那么Logger.getLogger("") 会给我所有记录器的父级吗?
  • 提到名称 "" 是根记录器的同义词,但仅在 getAnonymousLogger() 方法的 JavaDocs 中:docs.oracle.com/javase/7/docs/api/java/util/logging/…
  • 我认为他们应该有一个名为 getRootLogger() 的方法。会更容易理解。
  • 同意。当他们这样做时,他们也应该添加 debugtraceerror 方法!
猜你喜欢
  • 1970-01-01
  • 2011-09-10
  • 2021-12-12
  • 2021-01-30
  • 1970-01-01
  • 2015-01-17
  • 2016-12-20
  • 2019-04-11
  • 1970-01-01
相关资源
最近更新 更多