c++ - 为 Boost.Log 严重性记录器实例的接收器设置严重性过滤器

标签 c++ logging boost boost-log

我在项目中使用 Boost.Log 1.55.0,我确实想更改 boost::log::sources::severity_logger 的所有接收器的严重性过滤器实例。

这是一个示例,说明如何使用初始严重性过滤器设置一个接收器:

void InitializeLogging(LogLevels const kLogLevel) const {
    auto line_id = boost::log::expressions::attr<unsigned int>("LineID");
    auto severity = boost::log::expressions::attr<LogLevels>("Severity");
    auto timestamp = boost::log::expressions::format_date_time<boost::posix_time::ptime>(
        "TimeStamp",
        "%Y-%m-%d %H:%M:%S");

    boost::log::formatter const kFormatter{
        boost::log::expressions::stream
        << std::setw(6) << std::setfill('0') << line_id
        << std::setfill(' ')
        << ": " << timestamp
        << " [" << severity << "] "
        << boost::log::expressions::smessage};

    using TextSink = boost::log::sinks::synchronous_sink<boost::log::sinks::text_ostream_backend>;
    boost::shared_ptr<TextSink> sink = boost::make_shared<TextSink>();
    boost::shared_ptr<std::ostream> stream(&std::clog, boost::empty_deleter());
    sink->locked_backend()->add_stream(stream);
    sink->set_filter(severity >= kLogLevel);
    sink->set_formatter(kFormatter);

    boost::log::core::get()->add_sink(sink);
    boost::log::add_common_attributes();
}

所以我可以在通过成员函数 set_filter 创建接收器时设置过滤, 但我想知道如何修改为 Boost.Log 的核心配置的一个/多个/所有接收器的过滤器。

  1. 是否有我没有看到的修改现有接收器的功能?
  2. 如果不是,我是否必须从核心移除汇并“重新创建”它们?

最佳答案

我自己找到了解决方案。因此,我将在这里回答我的两个问题:

  1. 这样的功能不存在,或者我找不到它。
  2. 不,可以通过调用 Boost.Log 核心上的函数 set_filter 为所有接收器设置过滤器。我为我的自定义严重性日志级别使用以下函数:

    void log_level(LogLevels const kLogLevel) {
      boost::log::core::get()->set_filter(boost::log::expressions::attr<CustomLogLevels>("Severity") >= kLogLevel);
    }
    

旁注:通过调用 boost::log::core::get()->remove_all_sinks() 可以从核心移除所有接收器,但不是必需的在我的用例中。

关于c++ - 为 Boost.Log 严重性记录器实例的接收器设置严重性过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25245458/

相关文章:

c++ - 在 clang++ 上使用带有 enable_shared_from_this 的 shared_ptr 时编译错误

c++ - 如何在msvc中强制返回值优化

java - 将错误代码中的行号记录给用户是一个好习惯吗?

c++ - 如何查找带有键的所有匹配 boost::multi_index ?

c++ - 控制台输出不断崩溃

c++ - 使用特征库再现张量矩阵

java - 根据状态更改记录器级别

scala - 如何在 akka 中重定向登录?

c++ - boost 异步服务器两次接受连接

c++ - 如何返回可变数量的各种类型的容器?