2009-06-17 2 views
6

В log4j есть ли способ иметь logger.error ("") и logger.debug ("") включать различные выходные макеты?Разная компоновка log4j для отладки и ошибки?

Я бы хотел, чтобы ошибки включали имена методов и номера строк, оба из которых замедляют производительность приложения.

EDIT:

После добавления апачский-log4j-статистов, следующий файл конфигурации работает.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" > 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <appender name="WARNINGS" class="org.apache.log4j.DailyRollingFileAppender"> 
     <param name="File" value="warnings.log"/> 
     <param name="DatePattern" value="'.'yyyy-MM-dd"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} %-5p %c - %m%n%n"/> 
     </layout> 
     <filter class="org.apache.log4j.filter.LevelRangeFilter"> 
      <param name="LevelMin" value="DEBUG"/> 
      <param name="LevelMax" value="WARN"/> 
     </filter> 
    </appender> 

    <appender name="ERRORS" class="org.apache.log4j.DailyRollingFileAppender"> 
     <param name="File" value="errors.log"/> 
     <param name="DatePattern" value="'.'yyyy-MM-dd"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <!-- %M for method name , %L for line number --> 
      <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} %-5p %c %M %L - %m%n%n"/> 
     </layout> 
     <filter class="org.apache.log4j.filter.LevelRangeFilter"> 
      <param name="LevelMin" value="ERROR"/> 
      <param name="LevelMax" value="FATAL"/> 
     </filter> 
    </appender> 

    <logger name="com.foo.bar"> 
     <appender-ref ref="WARNINGS"/> 
     <appender-ref ref="ERRORS"/> 
    </logger> 

</log4j:configuration> 

Этот код был использован для тестирования

// goes to errors.txt 
    log.error("error"); 
//goes to warnings.txt 
    log.warn("warn"); 
+1

В вашей ConversionPattern вы можете использовать% d {ISO8601}, это оптимизированный формат времени, который log4j обеспечивает как удобство, так и соображения скорости. – Gandalf

+0

@ Gandalf спасибо. Попытаюсь. – sal

ответ

9

В вашей конфигурации log4j.xml вы можете создать два приложения, каждый из которых использует LevelMatchFilter и каждый с отдельным выходом шаблона.

+0

Мне это нравится. Есть ли пример, на который вы можете указать мне? – sal

+0

Ссылка LevelMatchFilter больше не работает – Kairan

1

Я просто установки двух различных лесорубов. Один называется ERROR и один называется DEBUG. Затем вы можете легко настроить различные макеты вывода и вызвать только ERROR.error или DEBUG.debug.

+3

Плохой совет. Не подозревающие пользователи могут следовать вашим советам, которые были бы весьма неудачными. – Ceki

+0

Если вы так чувствуете, пожалуйста, скажите мне, почему - не просто слепо сказать, что что-то плохой совет, не давая лучшего совета. Почему это было бы неудачно? – Gandalf

+0

Лучший совет уже дал «Алекс Б». Вызов ERROR.error или DEBUG.debug довольно тупой. Прочитайте документацию по log4j или получите ключ. – Ceki

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