我正在开发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
。这应该删除周期。