【问题标题】:How to provide a log4j.properties to an OSGI Bundle (Eclipse-Plugin)?如何为 OSGI Bundle (Eclipse-Plugin) 提供 log4j.properties?
【发布时间】:2012-08-19 23:26:43
【问题描述】:

项目设置:

  1. Lo​​gging-1.0.jar
    • 包含一个使用 slf4j/log4j 的 Logger.class
    • 依赖于slf4j-api.jar、slf4j-log4j.jar、log4j.jar
  2. Lo​​ggingOSGI-1.0.jar
    • 包装日志项目
    • 包含一个 Activator 和 MANIFEST.MF
    • lib/ 包含 logging-1.0.jar、slf4j-api.jar、slf4j-log4j.jar、log4j.jar
    • 来自 lib/ 的 jar 被添加到类路径中,来自 logging-1.0.jar 的包被导出
  3. SomeBundle-1.2.jar
    • 包含一个 Activator 和 MANIFEST.MF
    • 依赖于 LoggingOSGI-1.0.jar

从 SomeBundle 访问 Logger 类有效,但日志项目找不到 log4j.properties(log4j:WARN No appenders could be found for logger)。

问题:

  • 我必须将 log4j.properties 放在哪里?
  • 有什么我可以尝试的想法吗? (已经尝试过:不同的目录、Eclipse-Buddies、-Dlog4j.configuration 作为 VM 参数)
  • 将是一个扩展点,它告诉日志记录项目 log4j.properties 的位置,这是一个好的解决方案吗?

【问题讨论】:

  • 附带说明,您可能需要签出 Pax Logging 以登录 OSGi。
  • 这不是一个选项,因为我们的完整逻辑在一个使用 slf4j 进行日志记录的简单 jar 中。为了方便起见,eclipse 插件只是包装器。看到这个问题:stackoverflow.com/questions/11670300/…
  • Pax Logging 接缝已死

标签: java eclipse-plugin log4j osgi slf4j


【解决方案1】:

当我大约六年前最后一次尝试这个时,解决方案变成了使用 log4j.properties 文件创建一个 片段包,然后附加该片段(通过Fragment-Host manifest 标头)到加载日志库的包(在您的情况下为“Logging-1.0.jar”)。对于看似如此简单的目标,感觉需要大量的项目结构、构建时间和部署开销。

有关片段包的更多详细信息,请参阅OSGi Service Platform Core Specification 的第 3.14 节。

另一种想法是考虑使用配置管理服务来指定磁盘上日志配置文件的路径,在你的包之外。这将需要扩充您的日志库以查找配置(或者,更好的是,listen 为一个),然后将该配置传递给日志实现。

如果我没有指出 OSGi 服务平台服务纲要第 101 节中指定的 OSGi 日志服务,我也会失职。

【讨论】:

  • 很好的答案,我仍然相信 SystemProperty 解决方案更简单,并且使用 log4j 标准来设置属性文件(-Dlog4j.configuration=...)
【解决方案2】:

为了解决我的问题,我将此代码添加到配置 log4j 的 LoggingOSGI-1.0 的激活器中。文件路径取自系统属性:-Dlog4j.configuration=path/to/log4j.properties

仍然对该解决方案的其他方法或意见感兴趣。

private static final String LOG4J_CONFIG_KEY = "log4j.configuration";

public void start(BundleContext bundleContext) throws Exception {
    Activator.context = bundleContext;

    if (System.getProperties().containsKey(LOG4J_CONFIG_KEY)) {
        String file = System.getProperties().getProperty(LOG4J_CONFIG_KEY);
        PropertyConfigurator.configure(file);
    }
}

【讨论】:

    猜你喜欢
    • 2013-02-10
    • 2011-05-21
    • 2011-06-18
    • 2013-02-03
    • 2016-07-20
    • 1970-01-01
    • 2017-01-02
    • 2014-02-11
    • 1970-01-01
    相关资源
    最近更新 更多