如何在 log4cplus 中添加自定义过滤器
How do I add a custom filter in log4cplus?
这是对条件日志记录问题的跟进。
我在 log4cplus 测试目录中找到了如何在属性文件中配置过滤器的示例(因此不需要使用 XML)我已经创建了自己的过滤器,但我在使用它时遇到问题。以下是我所做的更改:
在 spi/filter.h 中:
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.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;
}
在工厂.cxx中:
LOG4CPLUS_REG_FILTER (reg3, InstructionNumberFilter);
在属性文件中:
# 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
当我运行时,我收到错误:
log4cplus:ERROR Appender::ctor()- Cannot find FilterFactory: log4cplus::spi::InstructionNumberFilter
我试图将所有更改都基于StringMatchFilter的实现。我是否遗漏了需要执行的其他操作才能识别我的过滤器?
感谢您的帮助。
该错误是由于错误定位了从log4cplus构建的库。
因此,上面的例子是在log4cplus中实现自定义过滤器的方法。除非有人反对,否则我将把它留在这里,因为网络上很少有log4cplus过滤器的例子。
相关文章:
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- 如何在自定义对象的<<运算符中添加自定义前缀
- 如何添加自定义关键字以 clang 格式被视为"class"?
- 为C /CLI中的所有请求添加自定义的标头到WebBrowser控件
- 如何使用 word 对象模型中的C++接口在 word 中添加自定义 XML 艺术
- 如何在Boost Graph库中的Grid_graph的边缘添加自定义属性
- 当我添加自定义比较器时,无法插入新元素以设置
- 如何在Tensorflow Lite中添加自定义运算符
- cmake 如何在项目的 vcxproj 属性组中添加自定义条目?
- C 添加自定义XML标签,用于序列化对向量
- 如何在QT中添加自定义应用程序
- 在运行时添加自定义Qwidget
- 如何在Qt中添加自定义类处理功能
- 我可以添加自定义 #pragma 规则吗?
- BOOST _CHECK_EQUAL(和dervatives)添加自定义消息
- 正在添加自定义邮件头
- 如何在Qt Creator项目向导中添加自定义构建步骤
- 在Visual Studio 2010中为项目添加自定义图标
- 如何在boost图中添加自定义边缘标签
- 在microtik Winbox的注册表编辑器中添加自定义协议