提升日志更改默认日志记录::核心格式化程序

Boost Log changing the default logging::core formatter?

本文关键字:日志 程序 核心 格式化 记录 默认      更新时间:2023-10-16

我正在使用 Boost v1.54,我想简单地更改 logging::core 的默认接收器格式,但还没有找到这样做的方法。在日志记录格式文档中,它们仅显示如何更改自定义接收器(例如文件.log而不是默认接收器的格式?有没有办法在提升日志中全局设置默认格式?

这是他们所做的:

void init()
{
    logging::add_file_log
    (
        keywords::file_name = "sample_%N.log",
        keywords::rotation_size = 10 * 1024 * 1024,
        keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
        keywords::format = "[%TimeStamp%]: %Message%"
    );
    logging::core::get()->set_filter
    (
        logging::trivial::severity >= logging::trivial::info
    );
}

这就是我想要的:

void init()
{
    logging::core::get()->set_default_format("[%TimeStamp%]: %Message%");
    logging::core::get()->set_filter
    (
        logging::trivial::severity >= logging::trivial::info
    );
}

不知道你为什么要这样做,因为没有什么大事可以得到。这是不可能的,但有原因。

如果你在boost_1_54_0/boost/log/core/core.hpp下查看,它不允许设置除属性之外的任何内容 - 这本身就是一个很棒的功能。

返回时,一个接收器可以同时具有多种类型的流。

  • 基于文本文件
  • 基于控制台
  • 或两者兼而有之(如果要写入一次,输出转到文本文件和控制台)

对于核心,您可能只有一个接收器,您可以在其上添加任意数量的流。流可能根据您的要求而变化。但是格式将应用于接收器 - 所有流。

因此,以下是您如何看待这种关系:

  • 一个核心 --> 一个接收器(带格式) -->多个流

发布一次,它将以您应用的格式转到所有流。

来自同一链接的一个小例子。

此外,还有一些使用多个流的示例代码。

    shared_ptr< std::ostream > strm(new std::ofstream("test.log"));
    mSink->locked_backend()->add_stream(strm);
    shared_ptr< std::ostream > pStream(&std::clog, logging::empty_deleter());
    mSink->locked_backend()->add_stream(pStream);

    mSink->set_formatter
    (
        expr::format("%1%:[%2%] %3%")
            % expr::attr< boost::posix_time::ptime >("TimeStamp")
            //% expr::attr< boost::thread::id >("ThreadID")
            % expr::smessage
    );