log4cxx 以编程方式向特定记录器添加过滤器

问题描述 投票:0回答:1

在 Log4cxx 中,我知道可以向 appender 添加过滤器。 但是,如果我只想向特定记录器添加过滤器怎么办?

LoggerPtr logger = Logger::getLogger("loggerName");
AppenderPtr appender = logger->getAppender("appenderName");
appender->addFilter(...);

通过查看文档,我找不到向特定记录器添加过滤器的方法,我能想到的唯一方法是,对于每个我希望应用过滤器的特定记录器,我将创建一个特定的附加程序,并为此附加程序应用过滤器。还有其他方法吗?

如果可能的话,我正在寻找一种以编程方式进行的方法。

c++ log4j log4cxx
1个回答
1
投票

如果你想排除/包含特定的记录器名称,你可以使用 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.