在Eclipse 4(RCP / SWT / OSGi)应用程序中包含log4j的正确方法

这是一个后续(以某种方式我的第三方依赖于OSGi应用程序 ),其中建议一些库,例如log4j 已经作为bundle提供。
在Eclipse Indigo中,我找不到可用于Import Package的log4j Import Package作为我的安装的一部分,因此我Plugin Project from JAR archive创建了一个Plugin Project from JAR archive以捆绑log4j,还创建了一个Feature Project以便在此post之后捆绑log4j.xml配置。

说实话,我不明白为什么需要片段项目,但这个过程有效。
所以现在我的问题是:
由于log4j.xml是作为functionjar的一部分在导出中提供的,因此需要一些“努力”才能找到它并更新调试级别,所以我想知道这确实是正确的过程吗?
我记得最终导出的产品会在一个易于查找的位置提供log4j配置,但现在(虽然记录工作)我担心我做的是否确实是正确的。

有什么帮助吗?

如果你真的需要公开文件,你可以将它放在你想要的任何地方,然后确保你的程序在启动时调用这些方法之一:

  • org.apache.log4j.xml.DOMConfigurator。 configure (字符串文件名)
  • org.apache.log4j.PropertyConfigurator。 configure (String configFilename)

如果您想在不重新启动应用程序的情况下更改配置,请使用“configureAndWatch”变量。

编辑 :我写“如果你真的需要”,因为我经历过,我从不需要在部署后打开调试日志,因为它总是打开! 对于我对响应时间和吞吐量有正常(但不是极端)要求的应用程序,这是可以的。 记录到UDP-appender很快(并且不会填满磁盘)。 或者使用滚动文件appender是非常安全的,并且足够快我的使用。 在确定那些难以重现的错误时,始终拥有可用的调试日志可以挽救生命。

我建议看看Pax-Logging,它将为您提供各种日志框架,供OSGi环境中使用。 并且您可以使用外部配置文件(无需扩展程序)来配置日志记录。

该片段是扩展log4j bundle类路径以包含所需配置文件的一个选项。 它可能是配置应用程序范围属性的最简单方法。

这并不意味着在部署后会被更改,因为它将嵌入在jar文件中。 如果您希望在部署后使其可配置,则必须提出不同的方法。

注意:我担心你误解了已经作为捆绑包装的jar子的答案。 这并不意味着它们是您选择的OSGi平台(Indigo)的一部分,只是它们已经准备好按原样部署到OSGi平台。 您不需要创建插件项目,只需将jar添加到目标平台即可解决丢失的导入问题。