2013-06-12 4 views
0

현재, log4j 1.2입니다.Log4j 1.2 다중 레벨 필터링

경보를 생성 할 때마다 내 응용 프로그램에 기록해야하며 INFO 수준에서 수행하려고합니다. 루트 로거의 우선 순위는 INFO로 설정되어 있습니다. 여태까지는 그런대로 잘됐다. 우리는 stadard CONSOLE appender와 server.log appender (그리고 다른 것들)를 포함하여 특별한 필요를위한 몇개의 appender를 추가했습니다. 콘솔과 server.log appender로 루트 로거를 구성했습니다. 또한이 시점까지는 괜찮습니다.

<root> 
     <priority value="INFO"/> 
     <appender-ref ref="CONSOLE"/> 
     <appender-ref ref="server"/> 
     <appender-ref ref="logfileForErrors"/> 
    </root> 

는 지금은 특정 클래스에 대한 새로운 일반적으로 server.log에 간다 것을/모든 오류/경고의 FATAL 도착 펜더뿐만 아니라 정보를 정기적으로해야합니다.

<appender name="logfileForAlarmsAndOther" class="org.apache.log4j.RollingFileAppender"> 
    <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/> 
    <param name="file" value="${biomerieux.data}/simon/logs/vilink.log" /> 
    <param name="append" value="true" /> 
    <param name="threshold" value="INFO" /> 
    <param name="maxBackupIndex" value="1" /> 
</appender> 
다음

내 클래스에 대한 로거 정의 : 그래서

<logger name="my.root.path.service.alert.AlertService" additivity="false"> 
     <level value="info" /> 
     <appender-ref ref="logfileForAlarmsAndOther"/> 
     <appender-ref ref="CONSOLE"/> 
     <appender-ref ref="server"/> 
    </logger> 

나는 성공적으로 모든 내 경고 로그를 얻을를 나는 그래서 알람 정보 로그를 받아 들일 수있는 정보의 임계 값과 펜더 시작 (루트가 이미 INFO에 있었기 때문에 많은 작업이있었습니다). 하지만 실제로 원하는 것은 내 새 appender에서 정보를 얻는 것입니다. 은 특정 클래스의 정보 일뿐입니다.

잘 설명해 드렸지만 log4j에 정통하지 않으므로 필요한 경우 설명을 요청하십시오. 수수께끼는 내 새 appender를 WARNING 이상으로 제한하는 것과 관련이 있습니다. 단, 특정 클래스의 정보가 필요합니다. 또한이 클래스의 INFO는 상위 로거가 일반적으로 INFO를 기록하는 모든 appender로 이동해야합니다. 혼란 스러울 지 모르지만 log4j 1.2에서 작업 할 수있는 사용자 정의 필터처럼 보입니다.

답변

1

내가 이것을 해결하는 방법은 특정 클래스에 대한 추가 어린이 로거를 제거하고 펜더 내에서 일련의 필터로 대신 처리 할 수 ​​있었다 :

<appender name="logfileForAlarmsAndOther" class="org.apache.log4j.RollingFileAppender"> 
    <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/> 
    <param name="file" value="${biomerieux.data}/simon/logs/vilink.log" /> 
    <param name="append" value="true" /> 
    <param name="threshold" value="INFO" /> 
    <param name="maxBackupIndex" value="1" /> 
    <filter class="org.apache.log4j.varia.StringMatchFilter"> 
     <param name="StringToMatch" value="MyStringToMatch" /> 
     <param name="AcceptOnMatch" value="true" /> 
    </filter> 
    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
     <param name="LevelMin" value="WARN" /> 
    </filter> 
</appender> 

그래서 글로벌 임계 값 정보, 그리고 즉시 받아 String과 일치하는 INFO는 남은 메시지를 WARN 이상으로 제한하는 두 번째 필터의 영향을받습니다.

이 단점은 로그 메시지에 고유 한 검색 가능한 String을 도입해야한다는 것입니다.