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
参考: