2013-04-16 3 views
4

Кто-то может сказать мне, как я могу изменить свой файл log4j2.xml, чтобы добавить 1 файл журнала: один уровень трассировки и один уровень информации?Конфигурация log4j2

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="debug"> 
    <appenders> 
     <Console name="CONSOLE" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d %-5p %C{2} (%F:%L) - %m%n" /> 
     </Console> 
     <File name="DEBUG_FILE" fileName="debug.txt"> 
      <PatternLayout pattern="%d %-5p %C{2} (%F:%L) - %m%n" /> 
     </File> 
    </appenders> 
    <loggers> 
     <root level="debug"> 
      <appender-ref ref="CONSOLE" /> 
      <appender-ref ref="DEBUG_FILE" /> 
     </root> 
    </loggers> 
</configuration> 

ответ

7

Вы могли бы сделать уровень трассировки корневой регистратор (все сообщения) и поставить ThresholdFilter на консоли, так что только некоторые сообщения отображаются на консоли.

Эта конфигурация регистрирует только сообщения ERROR на консоли и одновременно регистрирует все сообщения (TRACE, DEBUG, INFO, ERROR ...) в файле debug.txt. Сообщения об ошибках и выше сообщения регистрируются как в консоли и в файле:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="ERROR"> 
    <appenders> 
     <Console name="CONSOLE" target="SYSTEM_OUT"> 
      <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/> 
      <PatternLayout pattern="%d %-5p %C{2} (%F:%L) - %m%n" /> 
     </Console> 
     <File name="DEBUG_FILE" fileName="debug.txt"> 
      <PatternLayout pattern="%d %-5p %C{2} (%F:%L) - %m%n" /> 
     </File> 
    </appenders> 
    <loggers> 
     <root level="trace"> 
      <appender-ref ref="CONSOLE" /> 
      <appender-ref ref="DEBUG_FILE" /> 
     </root> 
    </loggers> 
</configuration> 

Кстати, следует помнить, что ваш макет шаблона содержит шаблоны преобразования, которые требуют информации о местоположении (% C,% F и% L, если быть точным). Это означает, что для каждого сообщения журнала log4j2 необходимо сделать снимок стека, а затем пройти трассировку стека, чтобы найти класс и метод, которые выполняли ведение журнала.

Это очень, очень медленно.

Ведение журнала будет в 2-5 раз медленнее для синхронного ведения журнала и в 4-20 раз медленнее для асинхронного ведения журнала.

Если производительность не проблема, это не имеет значения, но это определенно то, о чем нужно знать. Лично я просто использую% c (имя регистратора), и сообщения журнала моего приложения достаточно уникальны, чтобы я мог быстро найти, откуда появилось сообщение. Только мои 2 цента.

--- обновление 2013-04-27 --- С тех пор я научился более простому способу сделать это: вы можете установить уровень на appender-ref.

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="debug"> 
    <appenders> 
     <Console name="CONSOLE" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d %-5p %c{2} - %m%n" /> <!--without location--> 
     </Console> 
     <File name="DEBUG_FILE" fileName="debug.txt"> 
      <PatternLayout pattern="%d %-5p %c{2} - %m%n" /> 
     </File> 
    </appenders> 
    <loggers> 
     <root level="debug"> 
      <appender-ref ref="CONSOLE" level="ERROR" /> 
      <appender-ref ref="DEBUG_FILE" /> 
     </root> 
    </loggers> 
</configuration> 
+0

Ваш обновленный файл conf не работал для меня, но оригинал прошел отлично. Благодарю. – melwil

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