如何向osgi包(eclipse插件)提供log4j.properties?

lb3vh1jj  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(502)

项目设置:
日志-1.0.jar
包含使用slf4j/log4j的logger.class
取决于slf4j-api.jar、slf4j-log4j.jar、log4j.jar
loggingosgi-1.0.jar文件
Package 日志项目
包含激活器和manifest.mf
lib/包含logging-1.0.jar、slf4j-api.jar、slf4j-log4j.jar、log4j.jar
lib/中的jar被添加到classpath,logging-1.0.jar中的包被导出
somebundle-1.2.jar文件
包含激活器和manifest.mf
依赖于loggingosgi-1.0.jar
从somebundle访问logger类是可行的,但是日志项目找不到log4j.properties(log4j:warn找不到logger的appender)。
问题:
我必须在哪里放置log4j.properties?
有什么主意我可以试试吗(已经尝试过:不同的目录,eclipse伙伴,-dlog4j.configuration作为vm参数)
将是一个扩展点,它告诉日志项目log4j.properties的位置,一个好的解决方案?

u4vypkhs

u4vypkhs1#

为了解决我的问题,我将此代码添加到配置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);
    }
}
djp7away

djp7away2#

当我在六年前最后一次尝试这个方法时,解决方案变成了用log4j.properties文件创建一个片段包,然后附加这个片段(通过 Fragment-Host 清单头)到加载日志库的捆绑包(在您的示例中是“logging-1.0.jar”)。对于这样一个看似简单的目标,感觉需要大量的项目结构、构建时间和部署开销。
请参阅osgi服务平台核心规范的第3.14节,以获取有关片段束的更多详细信息。
另一种想法是考虑使用configurationadmin服务来指定磁盘上日志配置文件的路径,在包之外。这将需要扩充日志库来查找配置(或者更好地说,侦听配置),然后将该配置传递给日志实现。
我也不必指出osgi日志服务,它在osgi服务平台服务概要的101节中有详细说明。

相关问题