【问题标题】:"log4j:WARN No appenders could be found" errors when running application from executable jar but no errors when running it inside IntelliJ从可执行 jar 运行应用程序时出现“log4j:WARN No appenders could be found”错误,但在 IntelliJ 中运行应用程序时没有错误
【发布时间】:2017-05-23 18:54:28
【问题描述】:

我正在使用 log4j2,但我的一些依赖项使用 log4j。当我从可执行的 jar 文件运行应用程序时,我只得到几行日志和以下消息:

log4j:WARN No appenders could be found for logger (org.reflections.Reflections).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

但是当我在 IntelliJ 中运行应用程序时,它会按预期工作,没有警告并且生成所有日志

我已经使用 maven enforcer 来禁止 log4j。我还尝试添加依赖项,但将范围设置为“提供”。

<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>[0.0,1.2.17)</version>
  <scope>provided</scope>
</dependency>

我也使用单个版本号而不是范围来完成上述操作。所有这些都适用于在 IntelliJ 中运行时,但当应用程序作为可执行 jar 运行时,它们都不起作用。

How do you configure logging in Hibernate 4 to use SLF4J 问题的答案表明我收到此错误消息,因为 log4j 不知何故爬进了我的 jar,我似乎无法阻止它。

任何有关如何解决此问题的建议将不胜感激。谢谢。

请注意,我使用的是 log4j2 和以下依赖项

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.25</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.8.2</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.8.2</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-slf4j-impl</artifactId>
  <version>2.8.2</version>
  <type>pom</type>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-1.2-api</artifactId>
  <version>2.8.2</version>
</dependency> 

【问题讨论】:

  • 不,这不是重复的。根据文档,我有所有必需的配置文件,包括 log4j.properties 或 .xml 文件是特别要避免的。我已经有一个正确配置的 log4j2.xml 文件。

标签: java log4j


【解决方案1】:

我使用以下 Maven 命令来查找正在拉入 log4j 的依赖项。

mvn dependency:tree -Dincludes=log4j:log4j

事实证明,log4j 被 Maven 插件 (maven-hyperjaxb3-plugin) 引入,并且由于某种原因 maven-enforcer-plugin 没有阻止它。当我在 IntelliJ 中运行应用程序时,插件没有被触发,因此依赖项没有包含在类路径中,但是当编译成可执行 jar 时,它仍然被拉入。

这个常见问题解答http://logging.apache.org/log4j/2.x/faq.html#which_jars 和这个问题的答案Configuring log4j2 and log4j using a single log4j2 xml file 非常有帮助。

很明显,问题是 log4j 将其放入 jar 中,如果您打算使用 log4j2,则不得将 log4j 包含在类路径中。

【讨论】:

    猜你喜欢
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多