3

我正在使用 Boost v1.54,我想简单地更改 logging::core 的默认接收器格式,但还没有找到这样做的方法。在日志记录格式化文档中,他们只展示了如何更改自定义接收器的格式,例如日志文件而不是默认的?有没有办法在 Boost 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
    );
}
4

1 回答 1

3

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

如果您查看 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
    );
于 2013-09-12T03:59:01.213 回答