2012-10-07 5 views
2

MapFilters에 대해 간단한 질문이 있습니다. 음, 나는지도가 무엇인지 알고 있습니다 : 간단한 키, 값 쌍.Java 패키지 Log4J2 : MapFilters

<MapFilter onMatch="ACCEPT" onMismatch="DENY" operator="or"> 
    <KeyValuePair key="eventId" value="Login"/> 
    <KeyValuePair key="eventId" value="Logout"/> 
    </MapFilter> 

을하지만 할 어디 코드에서 이러한 메시지를 정의 : 지금의 log4j는 (웹 사이트에서 예)에 의해 소위 맵 메시지를 필터링 할 수 있습니다. 나는 STH 좋아하는 시도 :

MapMessage mm = new MapMessage(); 
    mm.put("eventId", "Login"); 
    logger.exit(mm); 

그러나 이것은 오히려이 문제를 해결할 수있는 편리한 방법이 아니다 및 방법에 의해 : 그것은 작동하지 않습니다.

이 주제에 대한 더 자세한 소개는 알고 계십니까? API가 실제로 여기에 도움이되지 않습니다.

여러분 모두에게 감사드립니다.

답변

2

MapFilter을 구성하는 동안 위의 문제가 발생했습니다. ThreadContextMapFilter은 비슷한 방식으로 작동하지만이 경우 우리는 ThreadContext 맵을 채워야하며 모든 것이 잘 작동합니다. ThreadContextMapFilter의 성공 이유는 ThreadContext입니다. map은 Context 기반이며 동일한 컨텍스트의 모든 로그 이벤트에 유효하지만 MapMessage을 기반으로 작동하는 MapFilter은 컨텍스트 기반 (MapMessage)이 아니라 이벤트 기반입니다. 그래서 우리는 각각의 로깅 이벤트에 MapFilter에 대한 매개 변수로 MapMessage을 전달해야합니다.

관련 구성 및 코드 :

<configuration status="WARN" name="abcd"> 
    <properties/> 
    <MapFilter onMatch="ACCEPT" onMismatch="DENY"> 
     <KeyValuePair key="Mic" value="Mic123"/> 
    </MapFilter>     
     ........... 
     ........... <<Put other relevant configurations here>> 
</configuration> 

자바 코드 : 위의 코드에서

public static void main(String args[]) { 
    MapMessage mapMessage = new MapMessage(); 

    mapMessage.put("Mic", "Mic123"); 
    log4j2Tester.logger.debug(mapMessage,new Exception("Okies")); 
    log4j2Tester.logger.debug(mapMessage); 
} 

, log4j2Tester 내 독립 클래스의 객체이며, logger 구성된 로거입니다.

희망이 게시물은 문제를 해결할 것입니다. 해피 코딩.

+0

해결책을 제공해 주셔서 감사합니다. 나는 다음 번에 당신의 힌트를 시도 할 것입니다. –