log4j log4cxx以编程方式将过滤器添加到特定记录器

dfddblmv  于 2023-04-20  发布在  其他
关注(0)|答案(1)|浏览(96)

在Log4cxx中,我知道可以将filter添加到appender中。但是如果我只想将filter添加到特定的logger中呢?

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

通过查看documentation,我无法找到向特定记录器添加过滤器的方法,我能想到的唯一方法是为每个希望应用过滤器的特定记录器创建一个特定的appender,并为此appender应用过滤器。还有其他方法吗?
如果可能的话,我正在寻找一种编程的方法。

2fjabf4q

2fjabf4q1#

如果你想排除/包含一个特定的记录器名,你可以使用log 4cxx包含的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;
}

相关问题