log4j2 - ERROR记录器记录器没有与元素AppenderRef匹配的参数

时间:2016-05-05 07:13:24

标签: java log4j2

当使用log4j2跟踪消息时,会记录到控制台,而不记录任何其他内容。

2016-05-05 12:28:33,023 ERROR loggers Loggers has no parameter that matches element AppenderRef
2016-05-05 12:28:33,023 WARN No Root logger was configured, creating default ERROR-level Root logger with Console appender

以下是运行时在类路径中出现的代码和log4j2.xml。

package com.example.log4j;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class LogTester {

    public static void main(String[] args) {


        Logger logger = LogManager.getLogger(LogTester.class);
        logger.trace("Hello");
        logger.debug("Hello");
        logger.info("Hello");
        logger.warn("Hello");
        logger.error("Hello");
        logger.fatal("Hello");


    }

}


<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%m%n" />
        </Console>
    </Appenders>

    <Loggers>
        <Logger name="com.example.log4j" level="DEBUG" additivity="false" />
        <AppenderRef ref="STDOUT" />
    </Loggers>
</Configuration>

在pom.xml中,添加了以下依赖项,Java版本为1.6

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.2</version>
    </dependency>
    <dependency>

2 个答案:

答案 0 :(得分:1)

log4j2.xml文件中存在错误。

<Loggers>
    <Logger name="com.example.log4j" level="DEBUG" additivity="false" />
    <AppenderRef ref="STDOUT" />
</Loggers>

应该是

<Loggers>
    <Logger name="com.example.log4j" level="DEBUG" additivity="false">
        <AppenderRef ref="STDOUT" />
    </Logger>
</Loggers>

log4j确实需要一个xsd来验证xml配置。

答案 1 :(得分:0)

您的log4j2.xml文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%m%n" />
        </Console>
    </Appenders>

    <Loggers>
        <Logger name="com.example.log4j" level="DEBUG" additivity="false">
        <AppenderRef ref="STDOUT" />
    </Loggers>
</Configuration>

除了上面,您还必须添加一个 root 记录器,否则Log4j会为您创建一个记录到控制台的记录器。 为此,您需要在<Loggers>标签内添加以下代码。

<Loggers>
        <Root level="debug">
            <AppenderRef ref="YOUR_APPENDER_REFERENCE" />
        </Root>
</Loggers>

我建议添加一个RollingFile作为Appender,以将日志文件输出到目录中的文本文件,在控制台上记录大量数据是没有用的。