【问题标题】:How to use log4j in RCP application with Maven?如何在带有 Maven 的 RCP 应用程序中使用 log4j?
【发布时间】:2016-01-13 13:09:02
【问题描述】:

我正在开发一个具有 Maven 特性的小型 RCP 项目,现在我希望添加 log4j 依赖项。
为此,我所做的是:

  1. 在项目内的 bin 文件夹下添加了 log4j.properties。 bin 是生成所有类文件的文件夹。该文件如下所示:
# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\Srijani\\Personal Workspace\\RCP\\EditorApp\\log\\Application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
  1. 在 pom.xml 中添加了这个依赖项
<dependencies>
   <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
   </dependency>
  </dependencies>
  1. 在java代码中我是这样写的:
import org.apache.log4j.Logger;

import com.app.editor.constants.Constants;

public class DatabaseConnection {
    final static Logger logger = Logger.getLogger(DatabaseConnection.class);
}

此代码在编译时不会产生任何问题。但是,在运行代码时,我得到了这个错误:

!ENTRY org.eclipse.e4.ui.workbench 4 0 2016-01-13 13:50:35.397
!MESSAGE Unable to create class 'org.eclipse.ui.internal.e4.compatibility.CompatibilityView' from bundle '55'
!STACK 0
org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:62)

注意:我没有向 MANIFEST.MF 和 build.properties 添加任何内容。 请帮忙!

谢谢

更新:遇到了问题,但不知道如何解决。当我手动下载 jar 并将其设置在类路径中时,我可以在 Eclipse RCP 中使用 log4j。但是,当我尝试通过 Maven 下载它时,它不起作用。知道为什么会这样吗?

【问题讨论】:

  • 您收到 NoClassDefFoundError,最好在下载 Log4j-.jar 文件后检查或不在 .m2(存储库)下。此外,您必须声明 Log4j.properties 文件以告诉系统将日志文件放置在何处以及所有内容。
  • log4j.jar 已经下载到 C:\Users\me\.m2\repository\log4j\log4j\1.2.17 文件夹
  • “具有 Maven 特性的 RCP 项目”到底是什么意思?您如何管理 RCP 的依赖关系?您如何构建和运行您的 RCP 项目?

标签: java maven log4j swt eclipse-rcp


【解决方案1】:

如果您将 Maven 与 Eclipse RCP 结合使用,您应该考虑使用 Tycho[1]。 Tycho 使用 MANIFEST-first 方法,因此您无需编辑 pom 文件。

此外,您应该将 log4j.properties 放入以 log4j-bundle 作为主机插件的片段中。

[1]https://eclipse.org/tycho/

【讨论】:

    【解决方案2】:

    我希望在这个网站上解释清楚。对你有帮助。

    http://www.mkyong.com/logging/log4j-hello-world-example/

    我真诚的建议是,在项目中实施之前尝试创建一个示例示例。如果成功,您可以将其应用到项目中。

    【讨论】:

    • 我只关注这个网站。对于示例项目,我成功了。但是,当我尝试在 Eclipse RCP 项目中应用它时,它不起作用。
    • 做一件事,清理并构建您的项目一次。
    • 仅链接的答案在 SO 上通常不受欢迎,因为链接可能会失效。您能否将源代码中的基本部分添加到您的答案中? (没有投反对票,因为我想这还是有帮助的)
    • 好像是eclipse插件相关的错误,如果我没记错的话。另外,从外部复制 log4j jar 并将其添加到 web-inf/lib 目录中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多