如何为boost :: log console输出添加颜色编码?

bob*_*eff 4 c++ logging boost boost-logging boost-log

我正在尝试为linux下的boost :: log添加彩色日志输出.我读了以下内容,并尝试了这个:

#define MY_LOG_ERROR() BOOST_LOG_TRIVIAL(error) << "\033[1;31"

MY_LOG_ERROR() << "This is an error log."
Run Code Online (Sandbox Code Playgroud)

但它给了我以下结果:

[2016-07-11 17:23:16.328435] [0x00007f15f03d6780] [错误] [1; 31这是一个错误日志.

如何正确添加彩色日志输出到boost :: log?

And*_*hev 9

使用Boost.Log自定义输出的正确方法是使用格式化程序.要设置格式化程序,您必须按照此处所述为其设置接收器,但您可以继续使用该BOOST_LOG_TRIVIAL宏来生成日志记录.

格式化程序的好处是您可以访问格式化程序中的严重级别等日志记录属性.例如,您可以使用严重性级别在控制台上选择格式化日志记录的颜色.

void coloring_formatter(
    logging::record_view const& rec, logging::formatting_ostream& strm)
{
    auto severity = rec[logging::trivial::severity];
    if (severity)
    {
        // Set the color
        switch (severity.get())
        {
        case logging::trivial::severity::info:
            strm << "\033[32m";
            break;
        case logging::trivial::severity::warning:
            strm << "\033[33m";
            break;
        case logging::trivial::severity::error:
        case logging::trivial::severity::fatal:
            strm << "\033[31m";
            break;
        default:
            break;
        }
    }

    // Format the message here...
    strm << rec[logging::expressions::smessage];

    if (severity)
    {
        // Restore the default color
        strm << "\033[0m";
    }
}

sink->set_formatter(&coloring_formatter);
Run Code Online (Sandbox Code Playgroud)