2014-04-07 4 views
2

조건부 로깅의 this question에 대한 후속 조치입니다.log4cplus에 사용자 정의 필터를 추가하려면 어떻게합니까?

log4cplus 테스트 디렉토리에 등록 정보 파일에서 필터를 구성하는 방법에 대한 예제가 있으므로 (XML을 사용하지 않아도 됨) 자체 필터를 만들었지 만 사용하는 데 문제가 있습니다.

factory.cxx에서
InstructionNumberFilter::InstructionNumberFilter() 
{ 
    init(); 
} 

InstructionNumberFilter::InstructionNumberFilter(const helpers::Properties& properties) 
{ 
    init(); 
    properties.getUInt(instructionNumberToMatch, LOG4CPLUS_TEXT("InstructionNumber"));  
}  

void 
InstructionNumberFilter::init() 
{ 
    instructionNumberToMatch = 0; 
}  

FilterResult 
InstructionNumberFilter::decide(const InternalLoggingEvent& event) const 
{ 
    const uint currentInstructionNumber = 4; // TODO get number from MDC 

    if(currentInstructionNumber == instructionNumberToMatch){ 
     return ACCEPT; 
    } 

    return NEUTRAL; 
} 

:

LOG4CPLUS_REG_FILTER (reg3, InstructionNumberFilter); 
SPI/filter.cxx에서

class LOG4CPLUS_EXPORT InstructionNumberFilter : public Filter { 
    public: 
     // ctors 
     InstructionNumberFilter(); 
     InstructionNumberFilter(const log4cplus::helpers::Properties& p); 

     /** 
     * Returns {@link #NEUTRAL} is there is no string match. 
     */ 
     virtual FilterResult decide(const InternalLoggingEvent& event) const; 

    private: 
     // Methods 
     LOG4CPLUS_PRIVATE void init(); 

     // Data 
     /** Do we return ACCEPT when a match occurs. Default is <code>true</code>. */ 
     uint instructionNumberToMatch; 

}; 

: SPI/filter.h에서

: 여기에 내가 만든 변경 사항은

속성 파일에서 :

# Set up logging to standard output stream. 

log4cplus.appender.AP1=log4cplus::ConsoleAppender 
log4cplus.appender.AP1.layout=log4cplus::PatternLayout 
log4cplus.appender.AP1.layout.ConversionPattern=Rabble %-5p MDC(instructionNumber):%-10X{instructionNumber} [%d{%Q}](%l): %m 

log4cplus.appender.AP1.filters.1=log4cplus::spi::InstructionNumberFilter 
log4cplus.appender.AP1.filters.1.InstructionNumberToMatch=4 
log4cplus.appender.AP1.filters.2=log4cplus::spi::DenyAllFilter 
01 내가 오류를 얻을 실행하면 23,516,

는 :

log4cplus:ERROR Appender::ctor()- Cannot find FilterFactory: log4cplus::spi::InstructionNumberFilter 

은 내가 StringMatchFilter의 구현에 내 모든 변화의 기초를하려고 노력했다. 내 필터를 인식시키기 위해 필요한 다른 것을 놓치고 있습니까?

도움 주셔서 감사합니다.

답변

0

오류는 log4cplus에서 빌드 된 라이브러리를 잘못 배치 한 결과입니다.

따라서 log4cplus에서 사용자 정의 필터를 구현하는 방법 인 위의 예제 입니다. 아무도 객체가 아니라면 웹에 log4cplus 필터의 예가 거의 없기 때문에 여기에서 나가겠습니다.

관련 문제