読者です 読者をやめる 読者になる 読者になる

Boost.Log使い始め

C++

Boost 1.54.0から、ロギングライブラリであるBoost.Logが入りました。
いろいろ機能があるので、とりあえず基本的なところから紹介していきたいと思います。


まずは最も簡単なロギングのやり方として、trivial logというものを使ってみます。
これは、Boost.Logに事前に用意されたロギングの区分を使用するロガーです。


デフォルトでは、std::cout(標準出力)に出力されます。

#include <boost/log/trivial.hpp>
#include <boost/log/core.hpp>
#include <boost/log/expressions.hpp>

int main()
{
    // フィルタなしでロギング
    // 各区分ごとにログが出力される
    BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
    BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
    BOOST_LOG_TRIVIAL(info) << "An informational severity message";
    BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
    BOOST_LOG_TRIVIAL(error) << "An error severity message";
    BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";

    // ログにフィルタをかける。
    // info以上を出力し、それ以外は捨てる
    using namespace boost::log;
    core::get()->set_filter
    (
        trivial::severity >= trivial::info
    );

    // フィルタ付きでロギング
    // traceとdebugは出力されない
    BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
    BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
    BOOST_LOG_TRIVIAL(info) << "An informational severity message";
    BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
    BOOST_LOG_TRIVIAL(error) << "An error severity message";
    BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
}
[2013-07-25 15:30:04.681615] [0x728e1180] [trace] A trace severity message
[2013-07-25 15:30:04.682008] [0x728e1180] [debug] A debug severity message
[2013-07-25 15:30:04.682017] [0x728e1180] [info] An informational severity message
[2013-07-25 15:30:04.682024] [0x728e1180] [warning] A warning severity message
[2013-07-25 15:30:04.682030] [0x728e1180] [error] An error severity message
[2013-07-25 15:30:04.682036] [0x728e1180] [fatal] A fatal severity message
[2013-07-25 15:30:04.682051] [0x728e1180] [info] An informational severity message
[2013-07-25 15:30:04.682059] [0x728e1180] [warning] A warning severity message
[2013-07-25 15:30:04.682066] [0x728e1180] [error] An error severity message
[2013-07-25 15:30:04.682073] [0x728e1180] [fatal] A fatal severity message

出力フォーマットはデフォルトで、「タイムスタンプ」「スレッドID」「重要度(区分、severity level)」「メッセージ」の順になっています。
また、このtrivial logは複数スレッドからの書き込みに対してスレッドセーフになっています。