プログラム開発でログの出力を行いたいと思います。
今回はC++のプログラムで実装してみます。
まず、なんで今更Log4cppについて記述しようと思ったか説明します。
log4cppのサンプルや記述はネット検索ですぐに見つかります。
でも、上位で検索されたサンプルには間違いがそのまま残されていて、実際に動かしてみるとローテーションは行われませんでした。
また、注意深く見てみると、設定のパラメタすら間違ったままになっているのです。
私は、そのWebサイトの間違いに過去引っかかり、無駄な時間を費やしました。なので、そんな無駄な時間を今後費やすことのないように、ここに記述します。
そちらのサイトを批判するつもりはありませんので、当該サイトのURL等については記述しません。
なお、ここの記載内容に間違いがあった場合には、お手数ですがご指摘して頂けますようお願いします。
こちらのサイトを参考にされる方には、コメント欄に指摘されている内容も含め参考にされることを期待します。
なるべく、修正は行っていくつもりですが・・・将来のことなので、ご注意ください。また、Web上の情報は参考情報です。ご利用に際しては、ご自身の責任でご利用ください。
環境
今回実装を試したのは以下の環境です。
OS:CentOS 7.4
gcc バージョン 4.8.5
パッケージインストール
1 |
yum install log4cpp |
プログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#include <log4cpp/Category.hh> #include <log4cpp/PropertyConfigurator.hh> bool initLog4cpp() { // log configuration file const char *file_log4cpp_conf = "log.conf"; // log configuration try { log4cpp::PropertyConfigurator::configure("log.conf"); return true; } catch (log4cpp::ConfigureFailure& e) { // log4cpp Error messages std::cout << "log4cpp::ConfigureFailure : " << e.what() << file_log4cpp_conf << std::endl; return false; } } int main(int argc, char *argv[]) { bool configured = initLog4cpp(); if (!configured) { return -1; } log4cpp::Category& logger = log4cpp::Category::getInstance("logging"); int i = 0; for(i=0;i < 4096; i++){ logger.warn("warning message"); logger.info("Information message"); logger.debug("Debug message"); } return 0; } |
設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# カテゴリの設定 #log4cpp.rootCategory=DEBUG, rootAppender log4cpp.rootCategory=INFO, rootAppender log4cpp.category.logging=INFO, loggingAppender #log4cpp.category.logging=WARN, logginAppender log4cpp.category.logging.calc=NOTICE # アペンダの設定 # rootAppenderの設定 log4cpp.appender.rootAppender=ConsoleAppender log4cpp.appender.rootAppender.layout=BasicLayout # sampleAppenderの設定 log4cpp.appender.loggingAppender=RollingFileAppender log4cpp.appender.loggingAppender.fileName=sample.log log4cpp.appender.loggingAppender.maxFileSize=102400 log4cpp.appender.loggingAppender.maxBackupIndex=8 log4cpp.appender.loggingAppender.layout=BasicLayout |
ファイルサイズを102400バイトまでとする。
ログは最大8世代まで残す。
ざっとこんな感じ。
コンパイルは以下のコマンドで行う。
1 |
g++ sampl.cpp -lpthread -llog4cpp |