在 Log4cxx 中,我知道可以向 appender 添加过滤器。 但是,如果我只想向特定记录器添加过滤器怎么办?
LoggerPtr logger = Logger::getLogger("loggerName");
AppenderPtr appender = logger->getAppender("appenderName");
appender->addFilter(...);
通过查看文档,我找不到向特定记录器添加过滤器的方法,我能想到的唯一方法是,对于每个我希望应用过滤器的特定记录器,我将创建一个特定的附加程序,并为此附加程序应用过滤器。还有其他方法吗?
如果可能的话,我正在寻找一种以编程方式进行的方法。
如果你想排除/包含特定的记录器名称,你可以使用 log4cxx 包含的 LoggerMatchFilter。
或者,通过提供您自己的自定义过滤器(实现
decide(const LoggingEventPtr &event)
,您可以从 LoggingEvent 访问记录器名称。例如:
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;
}