2009-06-17 3 views
6

log4j에서 logger.error ("") 및 logger.debug ("")에 다른 출력 레이아웃을 포함시킬 수있는 방법이 있습니까?디버그 및 오류에 대한 log4j 레이아웃이 다릅니 까?

오류가 발생하면 메소드 이름과 행 번호가 포함되어 애플리케이션 성능이 저하됩니다.

편집 :

아파치의 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 감사합니다. – Gandalf

+0

. 시도 할 것이다. – sal

답변

9

log4j.xml 구성 내에서 각각 LevelMatchFilter을 사용하는 두 개의 부속 장치를 만들 수 있으며 각각 별도의 패턴 출력이 가능합니다.

+0

나는 이것을 좋아한다. 당신이 나를 가리킬 수있는 예가 있습니까? – sal

+0

LevelMatchFilter 링크가 더 이상 작동하지 않습니다. – Kairan

1

나는 것 단지 설정이 다른 로거를 테스트하는 데 사용되었다. 하나는 ERROR이고 하나는 DEBUG이라고 불린다. 그런 다음 다른 출력 레이아웃을 쉽게 설정하고 ERROR.error 또는 DEBUG.debug 만 호출 할 수 있습니다.

+3

나쁜 조언. 예상치 못한 사용자는 귀하의 충고에 따를 수 있습니다. 이는 매우 불행한 일입니다. – Ceki

+0

당신이 느끼는다면 나에게 이유를 말해주세요 - 맹목적으로 무언가가 더 나은 조언을하지 않고 나쁜 조언이라고 말하지 마십시오. 왜 그것은 불행할까요? – Gandalf

+0

더 나은 조언은 이미 "Alex B"에 의해 주어졌습니다. ERROR.error 또는 DEBUG.debug를 호출하는 것은 꽤 바보입니다. log4j에 대한 문서를 읽거나 단서를 얻으십시오. – Ceki

관련 문제