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

Jef*_*ass 52 java log4j log4j2

$ java -Dlog4j.configuration=file:///path/to/your/log4j2.xml -jar /path/to/your/jar_file.jar
Run Code Online (Sandbox Code Playgroud)

写到控制台,你得到

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Run Code Online (Sandbox Code Playgroud)

但是,它看起来像配置文件已找到并且无法解析:

    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.
Run Code Online (Sandbox Code Playgroud)

Jef*_*ass 60

问题1

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Run Code Online (Sandbox Code Playgroud)

解决方案1

使用log4j的版本2又名"log4j2"

-Dlog4j.configuration=
Run Code Online (Sandbox Code Playgroud)

应该读

-Dlog4j.configurationFile=
Run Code Online (Sandbox Code Playgroud)

问题2

log4j:WARN ....
Run Code Online (Sandbox Code Playgroud)

解决方案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>
Run Code Online (Sandbox Code Playgroud)

我不确定哪种排除做了伎俩.另外,我包含了对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>
Run Code Online (Sandbox Code Playgroud)

现在,仅进入控制台的1.2日志实际上流向我们的2.x appender.


Con*_*son 12

如果您在类路径中没有log4j-1.2.jar的财富,Renko 在他的评论中指出,您将只看到消息没有找到log4j2配置文件.

如果配置文件中存在错误,则会出现此问题,因为在启动时您不会被告知问题所在.

例如,如果你有一个log4j2.yaml文件,log4j2无法处理,例如,你没有为你的项目配置YAML解析器,或者你的配置完全不正确.您将看到没有找到log4j2配置文件的消息,没有进一步的信息.即使您有一个有效的log4j2.xml文件也是如此,因为log4j2只会尝试处理它找到的第一个配置文件.

我发现调试问题的最佳方法是根据上面提到的命令行参数显式声明您希望使用的配置文件.

-Dlog4j.configurationFile=
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助您确定问题是否实际上是由您的类加载器未找到log4j2配置文件或配置中的其他内容引起的.

更新

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

-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=<level>
Run Code Online (Sandbox Code Playgroud)


Pha*_*e P 6

我已经处理了一段时间了。我已经按照本文中所述更改了所有内容,甚至认为发生了错误。在这种情况下,请确保在更改.xml或.properties文件中的设置时清理项目。在日食环境中。选择项目->清洁

  • 很好的一点。在我的特定设置中,Maven -&gt; Install 不会删除以前创建的资源文件。因此,即使更改了依赖项,log4j2 配置文件也可能会挂起。 (2认同)
  • @LPD请正确阅读答案。有人说,如果没有这些帮助,问题可能是由缓存文件引起的。请注意,同一问题可能具有不同的原因。因此,可能不仅只有一种解决方案。在这种情况下。 (2认同)

LuQ*_*Qiu 6

我在java maven项目中使用配置单元jdbc,并且存在相同的问题。

我的方法是在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);
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)


pra*_*upd 5

我检查以验证日志记录的内容,

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
Run Code Online (Sandbox Code Playgroud)

2)确保我正确设置了 log4j2.json,这是通过 -Dlog4j.configurationFile=??? 完成的

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

println("log4j.configurationFile :: " + System.getProperty("log4j.configurationFile"))
Run Code Online (Sandbox Code Playgroud)

或者

Configurator.initialize(null, logConfig.getString("log4j.config.file"));
Run Code Online (Sandbox Code Playgroud)

另外,如果进行自动检测,请确保文件名是 log4j2.* 而不是 log4j.*

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

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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

[Fatal Error] log4j2.json:1:1: Content is not allowed in prolog.
Run Code Online (Sandbox Code Playgroud)


小智 5

我遇到了同样的问题,但是在网上阅读有关此问题的信息后,我注意到我的项目中没有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>
Run Code Online (Sandbox Code Playgroud)


小智 5

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