1

我正在开发一个 Eclipse RCP 应用程序,我想要一个自定义的 ConsoleAppender,所以我可以将所有日志重定向到日志窗口。log4j 插件和 log4j 片段(包含 log4j.properties)创建了一个我设法成功使用的单元。我还创建了一个“扩展”插件,其中包含我的代码来捕获日志数据。看看下面的 2 个插件和片段。

rcp_external_log4j (plugin containing the jar file)
  log4j-1.2.16.jar

rcp_external_log4j_fragment (containing the log4j.properties file)
  log4j.properties (which points to VirtualConsol)

rcp_external_log4j_extension (plugin containing the VirtualConsol)
  src/VirtualControl.java (which extends ConsoleAppender)

当我从 Eclipse 调试环境中执行我的项目时,一切正常。VirtualConsole 按预期转发所有日志记录数据。

但是,当我尝试使用“Eclipse 产品导出向导”将项目导出到独立可执行文件时,出现以下问题:

Problem Occured
'Export Product' has encountered a problem.
A cycle was detected when generating the classpath
rcp_external_log4j_extension
rcp_external_log4j
rcp_external_log4j_extension

VirtualConsole 扩展了 ConsoleAppender 并且也从代码的其他部分调用。VirtualConsole 位于 rcp_external_log4j_extension 中,由于 ConsoleAppender 的扩展而使用 log4j。rcp_external_log4j 使用 rcp_external_log4j_extension,因为 rcp_external_log4j 插件与 rcp_external_log4j_fragment 捆绑在一起,rcp_external_log4j_fragment 指的是 log4j.properties 文件中的 VirtualConsole。

问题:如何在没有循环依赖的情况下编写自己的 ConsoleAppender?我可以将代码放在片段中吗?我可以将代码放在包含 jar 文件 (rcp_external_log4j) 的插件中吗?我已经尝试了这 2 次尝试,但没有成功...

感谢任何帮助


问题解决了。src 与 jar 文件放在同一个插件中。

rcp_external_log4j (plugin containing the jar file)
  log4j-1.2.16.jar
  src/VirtualControl.java (which extends ConsoleAppender)

rcp_external_log4j_fragment (containing the log4j.properties file)
  log4j.properties (which points to VirtualConsol)

并将“src”添加到 rcp_external_log4j 的类路径中。在 MANIFEST.MF 中显示为

Bundle-ClassPath: log4j-1.2.16.jar,
 src/

这样,可以从片段和其他代码中使用 VirtualConsole。

build.properties 应该包含:

jars.compile.order = src/
source.src/ = src/
output.src/ = bin/

用于将代码包含在导出的产品中。

4

1 回答 1

0

我认为rcp_external_log4j_fragment不需要rcp_external_log4j_extension在其构建路径中,仅在清单中。这应该删除循环。

于 2013-09-17T11:16:10.603 回答