提问人:Aviel Fedida 提问时间:3/20/2023 更新时间:4/17/2023 访问量:78
log4cxx 以编程方式将过滤器添加到特定记录器
log4cxx add filter to specific logger programmatically
问:
在 Log4cxx 中,我知道可以向 appender 添加过滤器。 但是,如果我只想向特定记录器添加过滤器怎么办?
LoggerPtr logger = Logger::getLogger("loggerName");
AppenderPtr appender = logger->getAppender("appenderName");
appender->addFilter(...);
通过查看文档,我找不到向特定记录器添加过滤器的方法,我能想到的唯一方法是,对于我希望应用过滤器的每个特定记录器,我将创建一个特定的附加器,并为该附加器应用过滤器。还有其他方法吗?
如果可能的话,我正在寻找一种以编程方式做到这一点的方法。
答:
2赞
Stephen Webb
4/17/2023
#1
如果要排除/包含特定的记录器名称,可以使用包含 log4cxx 的 LoggerMatchFilter。
或者,通过提供您自己的自定义过滤器(实现您可以从 LoggingEvent 访问记录器名称)。例如:decide(const LoggingEventPtr &event)
auto MyCustomFilter::decide(const log4cxx::spi::LoggingEventPtr& event) const
{
auto result = log4cxx::spi::Filter::NEUTRAL;
if (m_loggerToMatch == event->getLoggerName()) {
if (.....)
result = log4cxx::spi::Filter::ACCEPT;
else
result = log4cxx::spi::Filter::DENY;
}
return result;
}
评论
logger->getAllAppenders()
appender->addFilter()