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의 구현에 내 모든 변화의 기초를하려고 노력했다. 내 필터를 인식시키기 위해 필요한 다른 것을 놓치고 있습니까?
도움 주셔서 감사합니다.