C++のLogger
ヘッダ1つで使えるeasyloggingppというのを
このあいだ使ったので、自分が使いそうな機能だけ抜き出して、メモ。
ソース
#include "easylogging++.h" #include <iostream> #include <string> #include <unistd.h> #include <thread> // 最初に初期化する _INITIALIZE_EASYLOGGINGPP using namespace std; // 関数の実行時間計測 void func(){ TIMED_FUNC(timerObj); this_thread::sleep_for(chrono::milliseconds(100)); PERFORMANCE_CHECKPOINT(timerObj); this_thread::sleep_for(chrono::milliseconds(200)); } int main(int argc, char *argv[]){ // 引数の処理 _START_EASYLOGGINGPP(argc, argv); // 引数は破壊されない for (int i = 0; i < argc; i++) { cout << argv[i] << endl; } // loggerの設定 el::Loggers::configureFromGlobal("global.conf"); // 引数に--debugが有れば、LOG(DEBUG)を有効にする bool debug = false; for (int i = 0; i < argc; i++) { if(string(argv[i]) == "--debug"){ debug = true; } } if(debug){ el::Configurations conf; conf.set(el::Level::Debug, el::ConfigurationType::Enabled, "true"); el::Loggers::reconfigureLogger("default", conf); } // 普通のログ出力 LOG(DEBUG) << "log to debug"; LOG(INFO) << "log to info"; // 10hit毎にログ出力 for (size_t i = 0; i < 100; i++) { LOG_EVERY_N(10, INFO) << "i=" << i << ": log to info every 10 times"; } for (size_t i = 1; i <= 9; i++) { // verbose levleは、コマンドから--v=xで出来る // 1 <= x<= 9で、xが大きい程、より煩い VLOG(i) << "verbose level=" << i; } if(VLOG_IS_ON(3)){ LOG(INFO) << "verbose level is greater than 3"; } // 関数の実行時間計測 func(); func(); // ブロックの実行時間計測 for (size_t i = 0; i < 3; i++) { TIMED_SCOPE(timerBlkObj, "heavy-iter"); this_thread::sleep_for(chrono::milliseconds(i*100)); } return 0; }
設定ファイル
-- default * DEBUG: ENABLED = false