2013-07-02 3 views
22

Я хочу сделать две вещи:log4j2 - Записывать в файл и консоль (с различными уровнями)

  1. Вход на консоль с определенным бревенчатого уровня
  2. в файл журнала с другой лог-уровня

Запись в консоль работает нормально, но файл журнала остается пустым.

Это мой 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> 

    <File name="MyFile" fileName="logs/app.log" immediateFlush="true"> 
     <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </File> 

    </appenders> 
    <loggers> 

    <logger name="filelogger" level="error"> 
     <appender-ref ref="MyFile"/> 
    </logger> 

    <root level="info"> 
     <appender-ref ref="Console"/> 
    </root> 
    </loggers> 
</configuration> 

Что может быть не так?

ответ

39

Я понял это! В этом случае нельзя использовать тег <Logger>, см. Ответ Гауранга Пател для получения дополнительной информации.

<?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> 

    <File name="MyFile" fileName="logs/app.log"> 
     <PatternLayout pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </File>    
    </appenders> 

    <loggers>  
    <root level="debug"> 
     <appender-ref ref="Console" level="info"/> 
     <appender-ref ref="MyFile" level="error"/> 
    </root>  
    </loggers> 
</configuration> 
+5

, и в чем была проблема? размещение решения без объяснения не помогает –

+2

Я добавил объяснение в ответе, отправленном мной .. –

5

<logger name="filelogger" level="error" >
В этом должна быть проблема. Имя регистратора обычно является вашим именем пакета (если вы специально не назвали его filelogger).
Попробуйте <logger name="com.yourpackage" level="error" additivity="true">

См Log4j2 Doc

+0

Спасибо. Он работал для регистрации файлов, но теперь консольный вывод исчез. Что-то не так там? – daker

+0

Отредактирован мой ответ добавлен 'additive = "true" ' – basiljames

+0

Аддитивность по умолчанию задана в log4j2 –

11

Хотя Дакер установил исправленный файл конфигурации, но он не объяснил это. Я хотел бы добавить объяснение здесь. Как указано в Log4j2 Документация here, использование < Значок регистратора > не требуется для данного требования. Далее, когда вы должны использовать <Logger> тег? Читайте ниже объяснения формирования документации,

Возможно, желательно исключить все Трассировочное из все, кроме com.foo.Bar. Простое изменение уровня журнала не будет выполнить задачу. Вместо этого, решение, чтобы добавить новое определение регистратора конфигурации:

<Loggers> 
    <Logger name="com.foo.Bar" level="TRACE"/> 
    <Root level="ERROR"> 
    <AppenderRef ref="STDOUT"> 
    </Root> 
    ... 
</Loggers> 
Смежные вопросы