c++ - 如何将颜色编码添加到 boost::log 控制台输出?

标签 c++ logging boost boost-log boost-logging

我试图在 linux 下为 boost::log 添加彩色日志输出。我读了the following我试过这个:

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

MY_LOG_ERROR() << "This is an error log."

但它给了我以下结果:

[2016-07-11 17:23:16.328435] [0x00007f15f03d6780] [error] [1;31This is an error log.

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

最佳答案

使用 Boost.Log 自定义输出的正确方法是使用 formatters .要设置格式化程序,您必须按照所述设置一个接收器 here , 但您可以继续使用 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_level::info:
            strm << "\033[32m";
            break;
        case logging::trivial::severity_level::warning:
            strm << "\033[33m";
            break;
        case logging::trivial::severity_level::error:
        case logging::trivial::severity_level::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);

关于c++ - 如何将颜色编码添加到 boost::log 控制台输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309479/

相关文章:

c++ - boost 。方便的 variables_map。利用在 options_desctription 中指定的类型

c++ - C 和 C++ 关于++ 运算符的区别

c++ - 作为模板参数的函数的多态签名(使用 lambda)

c++ - DirectX11 获取设备的交换链

bash - 从顶部输出中删除标题

安卓工作室 “Button Tapped!”

c++ - 如何使用 C API for Lua 在控制台中打印错误

mysql - 单表动态返回多个平均值的SQL语句是什么

c++ - 设置自定义收集器时,boost::log 不尊重 keywords::max_size 吗?

boost - std::lock/std::try_lock 是否有 try_lock_for 和 try_lock_until 的模拟?