找不到 log4j2配置文件。使用默认配置: 只将错误记录到控制台

$ java -Dlog4j.configuration=file:///path/to/your/log4j2.xml -jar /path/to/your/jar_file.jar

写入控制台,就会得到

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

但是,看起来配置文件已经找到,并且不能解析:

    log4j:WARN Continuable parsing error 2 and column 31
log4j:WARN Document root element "Configuration", must match DOCTYPE root "null".
log4j:WARN Continuable parsing error 2 and column 31
log4j:WARN Document is invalid: no grammar found.
log4j:ERROR DOM element is - not a <log4j:configuration> element.
log4j:WARN No appenders could be found for logger (kafka.utils.VerifiableProperties).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
313464 次浏览

问题1

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

解决方案1

使用 log4j 也就是“ log4j2”的版本2

-Dlog4j.configuration=

应该读读

-Dlog4j.configurationFile=

问题2

log4j:WARN ....

解决方案2

在您的项目中,不包含 log4j-1.2 jar,而是包含 log4j-1.2-api-2.1. jar。我不确定如何排除 log4j 1.2。我知道我的项目需要什么样的依赖性。所以,通过阅读,我排除了一些东西。

<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.8.2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.log4j</groupId>
<artifactId>log4j-core</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>

我不确定哪一个例外情况起了作用。另外,我在1.2 api 中加入了一个依赖项,它连接到2. x。

<!--
http://logging.apache.org/log4j/2.0/manual/migration.html
http://logging.apache.org/log4j/2.0/maven-artifacts.html
Log4j 1.x API Bridge
If existing components use Log4j 1.x and you want to have this logging
routed to Log4j 2, then remove any log4j 1.x dependencies and add the
following.
-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.2</version>
</dependency>

现在,只会进入控制台的1.2日志实际上会流向我们的2.x 附加程序。

如果您的类路径中的 log4j-1.2. jar 不是 Renko 在他的评论中指出,那么您将只能看到消息 找不到 log4j2配置文件

如果配置文件中有错误,那么这就是一个问题,因为启动时不会告诉您问题所在。

例如,如果您有一个 log4j2.yaml 文件,但是 log4j2无法处理它,因为例如,您还没有为项目配置 YAML 解析器或者您的配置不正确。您将遇到 找不到 log4j2配置文件消息,没有进一步的信息。即使您有一个有效的 log4j2.xml 文件,也是这种情况,因为 log4j2将只有 尝试处理它找到的第一个配置文件

我发现调试这个问题的最佳方法是按照提到的 以上命令行参数显式地声明您希望使用的配置文件。

-Dlog4j.configurationFile=

希望这将帮助您查明问题是否实际上是由于类加载器没有找到配置中的 log4j2配置文件或其他内容引起的。

更新

您还可以使用下面的属性更改状态记录器的默认级别,以获取更多信息:

-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=<level>

我已经处理这个问题有一段时间了。我已经改变了这篇文章中所描述的一切,甚至认为出现了错误。在这种情况下,请确保在更改。Xml 或。属性档案。 在 Eclipse 环境中,选择 Project-> Clean

在我的示例中,我在 gradle 项目的类路径中使用 log4j2Json 文件 log4j2.json,得到了相同的错误。

这里的解决方案是将 JSON 处理的依赖项添加到我的等级依赖项中。

compile group:"com.fasterxml.jackson.core", name:"jackson-core", version:'2.8.4'
compile group:"com.fasterxml.jackson.core", name:"jackson-databind", version:'2.8.4'
compile group:"com.fasterxml.jackson.core", name:"jackson-annotations", version:'2.8.4'

另见 Log4j2的文档:

JSON 支持使用 Jackson 数据处理器解析 JSON 这些依赖项必须添加到要使用 JSON 用于配置:

我用来验证日志记录的东西,

1)检查是否没有更老的 log4j 版本。

mvn dependency:tree | grep log ## ./gradlew dependencies | grep log
[INFO] +- com.prayagupd:log-service:jar:1.0:compile
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.6.2:compile
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.6.2:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.1.1:compile

2)确保我正确地设置了 log4j2.json,这是通过-Dlog4j.configationFile = ? ? ?

val logConfig: PropertiesConfiguration = new PropertiesConfiguration("application.properties")
System.setProperty("log4j.configurationFile", logConfig.getString("log4j.config.file"))


println("log4j.configurationFile :: " + System.getProperty("log4j.configurationFile"))

或者

Configurator.initialize(null, logConfig.getString("log4j.config.file"));

如果自动检测正在发生 确保文件名为 log4j2. * 而不是 log4j. *

3)另一个检查是 log4j2.json 的解析器,感谢 log4j 团队没有在 API 中提供解析器。

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.0</version>
</dependency>

如果找不到 json 解析器,这可能会引发异常

[Fatal Error] log4j2.json:1:1: Content is not allowed in prolog.

我已经通过配置构建路径解决了这个问题: 日食。

  1. 创建一个文件夹并将 logj4文件保存在其中。
  2. 在创建的文件夹中写入单击,然后转到 Build path。
  3. 单击 Add 文件夹
  4. 选择创建的文件夹。
  5. 点击确定和应用并关闭。

现在你应该能跑了

我在 java maven 项目中使用 hivejdbc,遇到了同样的问题。

我的方法是在 src/main/java/resources 下添加一个 log4j2.xml 文件

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class MyClassName {
private static final Logger LOG = LoggerFactory.getLogger(MyClassName.class);
}

Log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="<your_package_name>.<your_class_name>" level="debug">
<AppenderRef ref="Console"/>
</Logger>
<Root level="WARN">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

我得到这个错误是因为 log4j2文件从我的 src 文件夹中删除了

只需在 src 文件夹下添加 xml 文件

<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
</Console>


<RollingFile name="RollingFile" filename="logs/B2CATA-hybrid.log"
filepattern="${logPath}/%d{yyyyMMddHHmmss}-fargo.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
<Policies>
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingFile>


</Appenders>
<Loggers>
<Logger name="com.pragiti." level="trace" />
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="RollingFile" />
</Root>
</Loggers>

我有同样的问题,但我注意到我没有在我的项目 log4j2.xml 后,在网上阅读有关这个问题,所以我复制了相关的代码在一个记事本,恢复记事本文件为 xml,并添加到我的项目下的文件夹资源。对我有用。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

确保在 .../src/main/resources文件夹下放置的是 log4j2.*文件而不是 log4j.*文件。

这有时可以在 Web servlet 上找到的实际 log4j2配置文件之前抛出。至少我的案子是这样。因为我在 web.xml 中已经有了

  <context-param>
<param-name>log4jConfiguration</param-name>
<param-value>classpath:log4j2-app.xml</param-value>
</context-param>

检查 log4j-web 源码; 在课堂上

org.apache.logging.log4j.web.Log4jWebInitializerImpl

这就是底线;

String location = this.substitutor
.replace(this.servletContext.getInitParameter("log4jConfiguration"));

所有这些都使我认为这是在找到配置之前的临时日志。

我正在从事 TestNG Maven 项目,通过在 pom.xml中添加 <resources>标记,这对我来说很有用,这正好是我的自定义配置文件 log4j2.xml的路径。

<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>

这个问题在将 xml 文件名重命名为 log4j2.xml 之后得到了解决

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
  1. 创建一个新的 Text 文档,复制粘贴上面的代码并将其保存为 log4j2.xml。

  2. 现在复制这个 log4j2.xml 文件并将其粘贴到 Java 项目的 src 文件夹下。

  3. 再次运行你的 java 程序,你会看到错误消失了。

只要尝试下面的步骤,它会工作,

  1. 将 XML 文件直接保存在文件夹结构下面。 src/main/java
  2. 确保保存 pom.xml文件,以防发生任何更改。

使用: log4j-ap 2.13.2,log4j-core 2.13.2进行测试。

  1. 将 XML 文件直接保存在文件夹结构. src/main/java 下面
  2. 在 POM 中:
    <build>
<resources>
<resource>
<filtering>false</filtering>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
  1. 清洁和建造。

2022年 Intellij 用户答案

如果你使用 Intellij:

请遵循以下步骤:

  1. 将“资源”文件夹置于“ YourProject”根目录下,并将其标记为 「资源根源」。

  2. 将“ log4j2.xml”放在 resources 文件夹中