2016-05-02 4 views
1

Я хотел написать простую программу для тестирования log4j2. Я скопировал большую часть моего кода из manual. Это ошибка, я получаю:Log4j2 - Элемент обработки ошибок Appender

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> 

Любые идеи, как исправить эту ошибку?

ответ

5

В Log4j 2 типа Appender указан в имени элемента, а не с атрибутом 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.

+2

Фактически его синтаксис был бы правильным, если бы он просто добавил strict =" true "в качестве атрибута в элементе Configuration. – rgoers

-2

Используйте следующие строки

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

Нет, не используйте эту линию. Вот как вы работаете с Log4j 1, спрашивающий спрашивает о Log4j 2. –

+0

Я все еще получаю ту же ошибку, если я использую 'public static Logger logger = Logger.getLogger (« MyLogger »);' вместо 'private static final Logger logger = LogManager.getLogger («MyLogger»); ' – Stoffl

Смежные вопросы