项目设置:
从SomeBundle访问Logger类可以正常工作,但是日志记录项目找不到log4j.properties(log4j:WARN没有为记录器找到appender)。
问题:
答案 0 :(得分:7)
六年前我上次尝试时,解决方案转而使用 log4j.properties 文件创建片段包,然后附加该片段(通过Fragment-Host
清单标头)到加载日志库的软件包(在您的情况下为“Logging-1.0.jar”)。对于看似简单的目标,感觉就像很多项目结构,构建时间和部署开销一样。
有关片段包的详细信息,请参阅OSGi Service Platform Core Specification的第3.14节。
另一个想法是考虑使用配置管理服务来指定磁盘上的日志记录配置文件的路径。这将需要扩充您的日志库以查找配置(或者,更好的是, listen ),然后将该配置传递给日志记录实现。
我也不能指出 OSGi服务平台服务纲要第101节中指定的OSGi日志服务。
答案 1 :(得分:1)
为解决我的问题,我将此代码添加到配置log4j的LoggingOSGI-1.0的Activator中。文件路径取自System属性:-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);
}
}