【问题标题】:No log4j2 configuration file found. Using default configuration: logging only errors to the console找不到 log4j2 配置文件。使用默认配置:仅将错误记录到控制台
【发布时间】:2015-02-17 22:57:04
【问题描述】:
$ 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.

【问题讨论】:

  • 确保你的构建路径上没有多个 log4j 版本。看起来第一行是关于 log4j 2.x 和最后一个 log4j:WARN 和 log4j:ERROR 是从 log4j 1.x...他们有不同的配置..

标签: java log4j log4j2


【解决方案1】:

问题 1

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

解决方案 1

使用第 2 版 log4j aka "log4j2"

-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:WARN 输出是由类路径上的 log4j-1.2 jar 生成的。您可能希望从类路径中删除该 jar,而是使用 log4j-1.2-api-2.1.jar(作为 log4j2 一部分的 1.2 桥接器)。另见logging.apache.org/log4j/2.x/faq.html#which_jars
  • 嘿,@RemkoPopma 我发现你为 API 做出了贡献。 ;-)
  • 我尽力了。不过最近没有时间...如果您想帮忙,欢迎投稿!
  • @MaasSql,这个问题现在解决了吗,还是您仍然遇到问题?
  • @RemkoPopma,你的 cmets 是有道理的,但是,我对 Java / Maven 很陌生,所以我不知道如何用桥 api 替换 log4j-1.2。
【解决方案2】:

如果你的 classpath 中没有 log4j-1.2.jar 的财富为 Renko points out in his comment,你只会看到消息 no log4j2 configuration file found

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

例如,如果您有 log4j2 无法处理的 log4j2.yaml 文件,因为例如 you have not configured a YAML parser for your project,或者您的配置根本不正确。您将遇到 no log4j2 configuration file found 消息,没有更多信息。即使您有一个有效的 log4j2.xml 文件也是如此,因为 log4j2 只会attempt to process the first configuration file it finds

我发现调试问题的最佳方法是根据above 提到的命令行参数明确说明您希望使用的配置文件。

-Dlog4j.configurationFile=

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

更新

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

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

【讨论】:

  • 有一个调试标志,但没有很好的记录: - 在找到配置之前,可以使用系统属性org.apache.logging.log4j.simplelog.StatusLogger.level 控制状态记录器级别。 - 找到配置后,可以在配置文件中通过“status”属性控制状态记录器级别,例如:&lt;Configuration status="trace"&gt;
  • @RemkoPopma 谢谢 - 我实际上早先按照documentation 尝试过那个单位。但是,它被声明为 log4j2.StatusLogger.level 不起作用。您提到的属性确实有效。
  • 是的,文档令人困惑。部分原因是在配置过程中 StatusLogger 行为发生了变化。我将按照此处的建议改进文档:issues.apache.org/jira/browse/LOG4J2-955
【解决方案3】:

我有同样的问题,但我注意到在网上阅读有关此问题后,我的项目中没有 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>

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 优点。在我的特定设置中,Maven -> Install 不会删除以前创建的资源文件。因此,即使在依赖项发生更改后,log4j2 配置文件也可能会挂起。
    • @LPD 请正确阅读答案。有人说,如果这些答案都没有帮助,问题可能是由缓存的文件引起的。请注意,相同的问题可能有不同的原因。所以可能不会只有一种解决方案。在这种情况下。
    • 就我而言,我在构建/资源下的 pom 文件中启用了过滤。我必须为 XML 文件添加一个包含子句。如果有人仍然遇到此问题,您可能也需要检查一下。
    • @enissay,谢谢。你的评论救了我。完全忘记检查包含的内容
    【解决方案5】:

    我在一个 java maven 项目中使用 hive 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);
    }
    

    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>
    

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        我检查以验证日志记录的东西,

        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.configurationFile=???

        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.
        

        【讨论】:

          【解决方案8】:

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

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

          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'
          

          另见documentation of log4j2

          JSON 支持使用 Jackson 数据处理器来解析 JSON 文件。必须将这些依赖项添加到要使用的项目中 用于配置的 JSON:

          【讨论】:

            【解决方案9】:

            我收到此错误是因为 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>
            

            【讨论】:

            • 我将它放在与 pom.xml 相同的基本文件夹中。将它移动到 src/ 就可以了。感谢您的配置!
            【解决方案10】:

            我正在开发 TestNG Maven 项目,通过在 pom.xml 中添加 &lt;resources&gt; 标记对我有用,这恰好是我的自定义配置文件 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>
            

            【讨论】:

              【解决方案11】:

              将xml文件名重命名为log4j2.xml后问题解决

              【讨论】:

                【解决方案12】:

                测试: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. 清理和构建。

                【讨论】:

                  【解决方案13】:

                  我已经通过配置构建路径解决了这个问题。以下是我遵循的步骤: 在日食中。

                  1. 创建一个文件夹并将 logj4 文件保存在其中。
                  2. 在创建的文件夹中写入click并转到构建路径。
                  3. 点击添加文件夹
                  4. 选择创建的文件夹。
                  5. 单击确定并应用并关闭。

                  现在你应该可以运行了

                  【讨论】:

                    【解决方案14】:

                    这有时会在 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"));
                    

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

                    【讨论】:

                      【解决方案15】:
                      <?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程序,你会看到错误消失了。

                      【讨论】:

                        【解决方案16】:

                        只需尝试以下步骤,它就会起作用,

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

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2013-06-29
                          • 2014-10-18
                          • 1970-01-01
                          • 2018-08-27
                          • 2014-12-30
                          • 1970-01-01
                          • 2012-01-13
                          相关资源
                          最近更新 更多