我正在开发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,并且也从代码的其他部分调用。
由于ConsoleAppender的扩展,VirtualConsole位于rcp_external_log4j_extension中,并使用log4j。
rcp_external_log4j使用rcp_external_log4j_extension,因为rcp_external_log4j插件与rcp_external_log4j_fragment捆绑在一起,后者在log4j.properties文件中引用VirtualConsole。

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

感谢您的帮助



问题解决了。 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/


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

最佳答案

我认为rcp_external_log4j_fragment不需要在其构建路径中仅在清单中包含rcp_external_log4j_extension。这应该删除周期。

08-04 05:18