문제

로그 메시지의 내용을 기반으로 제 3 자 라이브러리의 특정 구성 요소에서 나오는 로그 이벤트를 필터링하고 싶습니다. 로그 이벤트가 특정 로거에 의해 생성 될 때만이 필터링을 적용하기를 원합니다 : "org.restlet.component.logservice". 필터링 자체는 로그 이벤트 메시지와의 기본 일치 일뿐입니다.

여러 부록에 로그인하는 중앙 Asyncappender가 있습니다. Logservice에서 나오는 이벤트가 필터링되지 않은 경우, 현재와 동일하게 취급되기를 원합니다. 즉, Asyncappender로 보내집니다. AsyncAppender에 필터를 추가하고 싶지 않습니다. 왜냐하면 이것은 끔찍한 비효율적 인 것처럼 보이기 때문입니다 (모든 이벤트를 필터링 할 필요는 없으며 Logservice Logger에서 나오는 이벤트만을 필터링 할 필요가 없습니다).

그래서 내가 시도한 것은 Logservice Logger를 맞춤형 appender와 연결하는 것입니다. 이는 커스텀 필터와 관련이 있습니다.

    <appender name="filtered" class="mystuff.FilteredAppender">
            <filter class="mystuff.EventFilter"/>
            <appender-ref ref="ASYNC"/>
    </appender>

    <logger name="org.restlet.Component.LogService">
            <appender-ref ref="filtered"/>
    </logger>

내가 현재받는 오류 ...

log4J : 오류가없는 레이아웃이 없음 [필터링]이라는 appender에 대한 레이아웃이 없습니다.

... 내 디자인에 문제가 있다고 말합니다. 내 커스텀 appender가 레이아웃에 관심을 가져야한다고 생각하지 않습니다. 실제로 로그 이벤트를 통과하거나 통과하지 않아도되기 때문입니다. 또한이 접근법에는 두 개의 사용자 정의 클래스가 필요하며 그 중 하나 (Mystuff.FilterferApendApender)는 전혀 가치를 추가하지 않습니다. 사용자 정의 필터를 보유하는 것이 있습니다.

나는 훨씬 더 깨끗한 일을하고 싶다 ...

    <logger name="org.restlet.Component.LogService">
            <filter class="mystuff.EventFilter"/>
    </logger>

... 그러나 이것은 Log4J 프레임 워크에서 지원되지 않습니다.

내가하고 싶은 방식을 필터링하는 이벤트를 수행하는 좋은 깨끗한 방법이 있습니까?

도움이 되었습니까?

해결책

이것 게시판 항목 내가 일할 수있는 솔루션을 설명합니다. Asyncappender를 필터 홀더로 사용해야하는 것은 부끄러운 일이지만 새로운 사용자 정의 appender를 만드는 최상의 옵션 인 것 같습니다. 그래서 나는 다음과 같이 끝납니다.

    <appender name="filtered" class="org.apache.log4j.AsyncAppender">
            <filter class="mystuff.EventFilter"/>
            <appender-ref ref="ASYNC"/>
    </appender>

    <logger name="org.restlet.Component.LogService" additivity="false">
            <appender-ref ref="filtered"/>
    </logger>

그러나 누군가가 여전히 더 나은 접근 방식을 알고 있다면 확실히 관심이 있습니다. :-)

다른 팁

log4j는 an입니다 엑스트라 도서관 (Javadoc) 제공하는 LoggerMatchFilter, 로거 이름을 필터링합니다. 로거 이름과 수락 또는 거부 여부를 설정합니다 (기본값은 수락해야합니다).

에서 decide 필터의 메소드는 로거 이름을 다음과 비교합니다. LoggingEvent object.getLoggerName() 평등을 위해. 놀랍게도 단순하고 명백한 필터이며 Log4J와 기본적으로 오지 않는 것에 놀랍습니다.

또는 3 자 라이브러리를 조용히하고 싶다면 다음이 유용하다는 것을 알았습니다.

<!-- LOGGER NEUTER -->
<logger name="org.apache"><level value="WARN"/></logger>
<logger name="org.springframework"><level value="WARN"/></logger>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top