0

我有一个使用 commons.logging 的现有捆绑包。我想在 Eclipse 插件测试期间为包中的类设置 logLevel。被测对象本身没有或不需要 log4j 作为捆绑包。因此,我需要知道如何配置包中可见的 jsr-47 记录器。

4

1 回答 1

0

JSR-47 在整个 JVM 上共享一个日志管理器。客户端应从资源初始化日志记录属性:

InputStream resourceAsStream = getClass().getResourceAsStream("logging.properties");
LogManager.getLogManager().readConfiguration(resourceAsStream);

该资源必须处理两个常见的 java 日志记录陷阱:

  1. 设置根记录器以允许更精细的输出(否则事情会在这里被压制)
  2. 设置包记录器以允许更精细的输出(否则这里会被压制)

它看起来像这样:

handlers = java.util.logging.ConsoleHandler
.level=FINEST
test=FINEST
java.util.logging.ConsoleHandler.level = FINEST

目标以通常的方式激活和使用 commons.logging:

log = LogFactory.getLog(getClass().getName();
log.debug("Badaboom");

然后输出到共享的 LogManager,然后到控制台。

警告:正在为测试读取的配置可以在代码中的其他位置动态更改。如果有这种情况发生,请向 Manager 注册一个属性更改侦听器,并使用断点停止代码以查找更改配置的代码。

注意:在这一点上,为什么 java.util.logging 不适合 OSGI 也很清楚了:相同的类和记录器名称可能由不同的包注册,覆盖设置。

于 2013-09-19T13:01:08.313 回答