log4cxx

log4cxx.properties の設定方法

More than 1 year has passed since last update.

log4cxx のコンセプト

Logger (ログ実行)

  • Logger とは? ログ記録に使うオブジェクト。com.foo や com.foo.Bar のような階層的な名前を持つ。
    • お薦めはログ対象のクラスと同じ名前をつける。
  • 最上階の Logger を Root Logger と呼ぶ。
  • 各 Logger は DEBUG, INFO 等の level を持てる。level を指定していない Logger の level は親 Logger と同じになる。
  • Root Logger は必ず level を持つ。
  • ログ要求は LOG4CXX_DEBUG(Logger, ...) のようなマクロを使う。
    • ログ要求に指定された level が Logger の level 以上の時だけログが実行される。
    • つまり、Logger に記録する level を指定する。

Appender (ログ出力)

  • Appender とは? ログを出力するオブジェクト
  • addAppender で Appender に Logger を追加する。
  • additivity flag == true の時、子の Logger が送ったログは親の Logger の Appender にも送られる。
  • additivity flag == false の時、子の Logger が送ったログは親の Logger の Appender に送られない。

設定

  • logger4cxx::PropertyConfigurator::configure(設定ファイル名) を使うとファイルでログの設定が出来る。
  • BasicConfigurator も PropertyConfigurator も無い場合
    • 環境変数 LOG4CXX_CONFIGURATION があればそのファイル名を設定ファイルとみなす。
    • なければ "log4cxx.xml", "log4cxx.properties", "log4j.xml" and "log4j.properties" を検索して設定ファイルとみなす。
    • なければログをしない。

ConversionPattern で出力フォーマットを指定出来る。

  • %-5p: level を 5 文字左寄せ
  • %d{dd MMM yyyy HH:mm:ss,SSS}: タイムスタンプ
  • %t: スレッド名
  • %c: Logger の名前
  • %F: ファイル名
  • %L: 行番号
  • %M: メソッド
  • %m: メッセージ
  • %n: 改行

設定例1

log4j.appender.SmartDeviceLinkCoreLogFile.layout.ConversionPattern=%-5p [%d{dd MMM yyyy HH:mm:ss,SSS}][%t][%c] %F:%L %M: %m%n

出力例2

TRACE [31 Oct 2017 18:54:29,905][0x7fe1fd6dc740][Utils] /home/tyamamiya/src/sdl_core/src/components/utils/src/threads/posix_thread.cc:160 Thread::start: Enter

設定例1

log4j.appender.SmartDeviceLinkCoreLogFile.layout.ConversionPattern=%-5p [%d{HH:mm:ss}] %.32F:%L %m%n

出力例2

TRACE [12:59:03] tion_manager/src/request_info.cc:178 Enter

Appender ごとにレベルを変えたい場合は Threshold を使う。

log4j.appender.SmartDeviceLinkCoreLogFile.Threshold=DEBUG

参考:
* How to use log4cxx?
* Short introduction to Apache log4cxx」への補足
* 基本のAppdender