Boost日志更改默认的logging :: core格式化程序?

时间:2013-09-11 14:11:24

标签: c++ logging boost boost-log

我正在使用Boost v1.54,我想简单地更改logging :: core的默认接收器格式,但还没有找到方法。在Log Record Formatting文档中,它们仅显示如何更改自定义接收器的格式,例如日志文件而不是默认文件?有没有办法在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
    );
}

1 个答案:

答案 0 :(得分:3)

不确定为什么要这样做,因为没有什么可以获得的。 这是不可能的,但有理由。

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

回过头来,一个接收器可以同时拥有多种类型的流。

  • 基于文本文件
  • 基于控制台
  • 或两者(如果你想写一次,输出转到文本文件和控制台)

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

所以这就是你如何看待这种关系:

  • One Core - >一个接收器(带格式) - >多个流

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

来自同一链接的一个minor example

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

    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
    );