2011-04-06 4 views
0

INFO가 콘솔에 표시하는 이유에 대해 혼란 스럽습니다. 여기에 일반적인 설정은 다음과 같습니다우선 순위와 관련하여 log4j appender 가법성을 이해할 수 있도록 도와주세요

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <param name="Threshold" value="DEBUG"/> 
    <layout .../> 
</appender> 

<appender name="REST_LOG" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="File" value="/logs/rest.log" /> 
    <param name="Threshold" value="INFO" /> 
    .... 
</appender> 

<category name="xyz.web"> 
    <priority value="WARN" /> 
    <appender-ref ref="CONSOLE" /> 
</category> 

<category name="xyz.web.rest"> 
    <priority value="INFO" /> 
    <appender-ref ref="REST_LOG" /> 
</category> 

그래서 난 단지 REST_LOG 및 콘솔로 이동 위 REST_LOG하고 문을 경고하고 할 수있는 정보 이상 문을합니다. 내가보고있는 것은 예상대로 REST_LOG에서 xyz.web.rest의 INFO 명령문뿐 아니라 예상치 못했던 CONSOLE의 xyz.web.rest에서 INFO 명령문을 보는 것입니다.

누군가 무슨 일이 일어 났는지 설명 할 수 있습니까?

답변

1

임계 값은 계층 적입니다. DEBUG에는 INFO, WARN, ERROR가 모두 포함됩니다. 따라서 INFO 레벨 메시지를 수신하는 DEBUG 임계 값으로 콘솔을 정의하는 것이 당연합니다.

콘솔에 WARN 및 ERROR 만 수신하게하려면 임계 값을 WARN으로 설정하십시오.

4

xyz.web.rest 로거에서 덧셈을 false로 설정해야합니다. 로거가 루트 로거 의와 xyz.web 로거의 어 펜더를 상속하기 때문에 콘솔에 두 번 로거 xyz.web.rest와 함께 기록 된 모든 INFO 메시지가 표시됩니다 상가없이

.

는 Log4j의 문서 계층 구조 명명 된

Appenders and Layouts 섹션을 참조하십시오 점 다음에 그 이름이 자손 로거의 접두사 인 경우 로거 다른 로거 의 조상이라고합니다
이름 자체와 하위 로거 사이에 조상이없는 경우 로거는 하위 로거의 부모라고합니다.

예를 들어, "com.foo"라는 로거는 "com.foo.Bar"라는 이름의 로거 의 부모입니다. 마찬가지로 "java"는 "java.util"의 부모이고 은 "java.util.Vector"의 조상입니다. 이 명명 체계는 대부분의 개발자에게 친숙한 이어야합니다.

루트 로거는 로거 계층의 맨 위에 있습니다.

  1. 항상 존재
  2. 이 이름을 검색 할 수 없습니다 : 그것은 두 가지 방법으로 특별하다.

의 Appender 및 레이아웃

소정 로거 활성화 된 각 기록 요청은 해당 기록 장치뿐만 아니라 계층에서 높은 펜더에 모든 펜더에 전달한다. 예를 들어 콘솔 첨부자가 루트 로거에 추가 된 경우 사용 가능한 모든 로깅 요청은 콘솔 에 적어도 인쇄됩니다.

파일 추가기가 로거에 추가 된 경우 (예 : C) 로깅 요청이 C 및 C의 자식에 대해 파일과 콘솔에 인쇄됩니다. 이 기본 동작을 무시할 수 있으므로 additivity 플래그를 false로 설정하여 appender 축적이 더 이상 추가되지 않게 할 수 있습니다.

+0

어떻게하면 특정 appender에 대해 additivity 플래그를 false로 설정할 수 있습니까? 예를 들어, 저는 ERROR를위한 appender와 WARN을위한 appender를 가지고 있습니다. ERROR 로그 파일에 포함 된 WARN 내용을보고 싶지 않습니다. WARN 로그 파일을 WARN 로그 파일에만 표시하고 ERNOR 로그 파일에는 표시하지 않습니다. 이 일을 할 수 있는지 알 수 있습니까? – huahsin68

관련 문제