【问题标题】:Log4j2 - Error processing element AppenderLog4j2 - 错误处理元素 Appender
【发布时间】:2016-05-02 08:26:38
【问题描述】:

我想写一个简单的程序来测试 log4j2。我从manual 复制了大部分代码。 这是我得到的错误:

2016-05-02 10:11:31,054 main ERROR Error processing element Appender ([Appenders: null]): CLASS_NOT_FOUND
2016-05-02 10:11:31,054 main ERROR Error processing element Appender ([Appenders: null]): CLASS_NOT_FOUND
2016-05-02 10:11:31,117 main ERROR Unable to locate appender "STDOUT" for logger config "root"
2016-05-02 10:11:31,117 main ERROR Unable to locate appender "File" for logger config "MyLogger"

我的java代码:

package log4jtest;

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

public class Log4jtest {
    private static final Logger logger = LogManager.getLogger("MyLogger");
    public static void main(String[] args) {
        logger.error("Hello, World!");
    }
}

我的 log4j2 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" name="Log4jTest" packages="">
    <Properties>
        <Property name="filename">test.log</Property>
    </Properties>

    <Appenders>
        <Appender type="Console" name="STDOUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Appender>

        <Appender type="File" name="File" fileName="${filename}">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Appender>
    </Appenders>

    <Loggers>
        <Logger name="MyLogger" level="ALL" additivity="false">
            <AppenderRef ref="File" />
        </Logger>
        <Root level="ALL">
            <AppenderRef ref="STDOUT" />
        </Root>
    </Loggers>
</Configuration>

任何想法如何解决这个错误?

【问题讨论】:

    标签: java log4j2


    【解决方案1】:

    在 Log4j 2 中,附加程序的类型是在元素名称中指定的,而不是使用 type 属性。

    也就是说,替换诸如

    之类的行
        <Appender type="Console" name="STDOUT">
    

    和

        <Appender type="File" name="File" fileName="${filename}">
    

    与

        <Console name="STDOUT">
    

    和

        <File name="File" fileName="${filename}">
    

    另请参阅Log4j 2 documentation on appenders。

    【讨论】:

    • 实际上,如果他只是在 Configuration 元素上添加 strict="true" 作为属性,他的语法是正确的。
    【解决方案2】:

    在我的例子中是错误的元素名称

    <Appenders>
        <RollingRandomAccessFileAppender name="stdout" fileName="../logs/app.log" filePattern="../logs/app.%d{yyMMdd}.%i.log.gz">
    ...
    

    正确的是

    <Appenders>
        <RollingRandomAccessFile name="stdout" fileName="../logs/app.log" filePattern="../logs/app.%d{yyMMdd}.%i.log.gz">
    ...
    

    【讨论】:

      【解决方案3】:

      使用下面一行

      public static Logger logger = Logger.getLogger("MyLogger");
      

      【讨论】:

      • 不,不要使用那条线。这就是您使用 Log4j 1 的方式,提问者正在询问 Log4j 2。
      • 如果我使用public static Logger logger = Logger.getLogger("MyLogger"); 而不是private static final Logger logger = LogManager.getLogger("MyLogger");,我仍然会遇到同样的错误
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多