How to add color coding to boost::log console output?

后端 未结 2 1329
故里飘歌
故里飘歌 2021-02-09 04:59

I\'m trying to add colored log output for boost::log under linux. I read the following and I tried this:

#define MY_LOG_ERROR() BOOST_LOG_TRIVIAL(error) <<         


        
2条回答
  •  伪装坚强ぢ
    2021-02-09 05:35

    The proper way to customize output with Boost.Log is to use formatters. To set a formatter you will have to set up a sink for that as described here, but you can keep using the BOOST_LOG_TRIVIAL macro for generating log records.

    The good thing about formatters is that you can have access to log record attributes like severity level within the formatter. For example, you could use the severity level to choose the color of the formatted log record on the console.

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

提交回复
热议问题