如何为jsr-47支持的bundle配置commons.logging?

时间:2013-09-19 11:53:09

标签: osgi apache-commons-logging

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

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. 设置根记录器以允许更精细的输出(否则事情会被压制)
  2. 设置包记录器以允许更精细的输出(否则事情会被压制)
  3. 看起来像这样:

    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:相同的类和因此记录器名称可以通过不同的包注册,覆盖设置。