C++用のログ出力ライブラリとして、log4cppがある。使うまでの準備と使用例をまとめる。
準備
- SourceForgeのサイトからlog4cppのソースコードをダウンロードする。
本投稿ではバージョン1.1.1を使用。 - 任意のフォルダに展開する。
- log4cpp\msvc10配下のmsvc10.slnを開く。
本投稿ではVisual Studio Express 2013 for Windows Desktopを使用。
プロジェクトのアップグレードに関連するメッセージが表示される。OKを押して進む。 - log4cppプロジェクトをビルドする。
log4cpp\msvc10\log4cpp\Releaseフォルダ配下に以下のファイルが生成されていることを確認する。- log4cpp.lib
- log4cpp.dll
使用
-
Visual StudioにてVisual C++新規プロジェクトを作成する。
-
プロジェクトのプロパティページの[リンカー]-[入力]にて、生成されたlog4cpp.libを追加ライブラリとして指定する。
-
ログ出力フォーマットファイルを用意。
log4cpp.properties# log4cpp.properties log4cpp.rootCategory=DEBUG, rootAppender log4cpp.appender.rootAppender=RollingFileAppender log4cpp.appender.rootAppender.fileName=log4cppSample.log log4cpp.appender.rootAppender.maxFileSize=10000000 log4cpp.appender.rootAppender.maxBackupIndex=5 log4cpp.appender.rootAppender.layout=PatternLayout log4cpp.appender.rootAppender.layout.ConversionPattern=%d [%-5p] %m%n
-
ロガーを提供するクラスを追加。
Log.h#pragma once #include <log4cpp/Category.hh> #include <log4cpp/PropertyConfigurator.hh> class Log { private: Log(); public: ~Log(); static log4cpp::Category& getLogger(); };
Log.cpp#include "stdafx.h" #include "Log.h" Log::Log() { } Log::~Log() { } log4cpp::Category& Log::getLogger() { std::string initFileName = "log4cpp.properties"; log4cpp::PropertyConfigurator::configure(initFileName); return log4cpp::Category::getRoot(); }
-
ログを出力したいクラスにて、上のロガー提供クラスからロガーを入手。
そしてログ出力。log4cppSample.cppint _tmain(int argc, _TCHAR* argv[]) { log4cpp::Category& logger = Log::getLogger(); logger.warn("Storm is coming"); Base* pBase = new Base(); Base* pDerived = new Derived(); pBase->printLog(); pDerived->printLog(); logger.shutdown(); delete pDerived; delete pBase; return 0; }
Base.cppvoid Base::printLog()
{
log4cpp::Category& logger = Log::getLogger();
logger.info("This is Base");
}
```cpp:Derived.cpp
void Derived::printLog()
{
log4cpp::Category& logger = Log::getLogger();
logger.info("This is Derived");
}
- ログ出力例
log4cppSample.log
2015-07-04 14:06:05,900 [WARN ] Storm is coming
2015-07-04 14:06:05,903 [INFO ] This is Base
2015-07-04 14:06:05,904 [INFO ] This is Derived