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

时间:2015-02-17 22:57:05

标签: java log4j 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.

16 个答案:

答案 0 :(得分:50)

问题1

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

解决方案1 ​​

使用log4j的版本2又名“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 appenders。

答案 1 :(得分:10)

如果你的类路径中没有log4j-1.2.jar的财富Renko points out in his comment,你只能看到消息找不到log4j2配置文件

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

例如,如果你有一个log4j2.yaml文件,log4j2无法处理,例如,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>

答案 2 :(得分: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>

答案 3 :(得分: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>

答案 4 :(得分:3)

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

答案 5 :(得分:2)

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

答案 6 :(得分:1)

在我的情况下,我在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:

答案 7 :(得分:1)

东西我检查验证记录,

1)检查是否没有oder 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 :(得分:1)

我正在处理TestNG Maven项目,这是通过在<resources>中添加pom.xml标记为我工作的,这恰好是我的自定义配置文件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>

答案 9 :(得分:1)

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

答案 10 :(得分:0)

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

  1. 创建一个文件夹并将logj4文件保存在其中。
  2. 在创建的文件夹中单击鼠标,然后转到构建路径。
  3. 点击添加文件夹
  4. 选择创建的文件夹。
  5. 单击“确定”并“应用并关闭”。
  6. 现在你应该可以运行

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

<?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程序,您将看到错误消失了。

答案 15 :(得分:0)

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

  1. 将XML文件直接保留在下面的文件夹结构下。 src/main/java
  2. 请确保保存pom.xml文件,以防万一。