LoginSignup
3
5

More than 5 years have passed since last update.

log4cpp覚え書き

Last updated at Posted at 2015-07-04

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.cpp
  int _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.cpp
  void Base::printLog()
{
    log4cpp::Category& logger = Log::getLogger();

    logger.info("This is Base");
}
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
3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5