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は複数スレッドからの書き込みに対してスレッドセーフになっています。