Boost.Log 自動的にフラッシュする
ファイルにログ出力するなら、やはり書き込むたびに自動的にフラッシュしてほしいです。(std::fstreamは自動的にフラッシュされます。)
Boost.Logは、ファイル出力のセットアップ時に、自動的にフラッシュするかどうかを設定できます。
先日の、時間によるローテーションを行うサンプルを、ちょっと修正してみます。
#include <boost/log/trivial.hpp> #include <boost/log/utility/setup/file.hpp> #include <boost/log/attributes.hpp> #include <boost/thread.hpp> #include <boost/chrono/duration.hpp> namespace attrs = boost::log::attributes; namespace keywords = boost::log::keywords; namespace sinks = boost::log::sinks; int main() { // ログファイルの出力設定 // logsディレクトリに「年_月_日.log」というファイル名でログ出力 // 0時0分0秒に、新たなログファイルを作成する boost::log::add_file_log( keywords::file_name = "logs/%Y_%m_%d.log", keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0), keywords::format = "[%TimeStamp%]: %Message%", keywords::auto_flush = true ); // タイムスタンプの属性を設定(ローカル時間) boost::log::core::get()->add_global_attribute("TimeStamp", attrs::local_clock()); for (int i = 0; i < 1000; ++i) { BOOST_LOG_TRIVIAL(info) << "hello"; // boost::log::core::get()->flush(); // 手動フラッシュはいらないのでコメントアウト // 30秒起きに出力 boost::this_thread::sleep_for(boost::chrono::seconds(30)); } }
add_file_log()
関数の名前付き引数として、「keywords::auto_flush = true
」を渡しています。
これで、書き込みのたびに自動的にフラッシュされます。