logback のドキュメントとソースを読んだメモ
調べたバージョンは 1.2.11
で logback-classic
のメモです
設定ファイル クラスの読み込み
マニュアルのConfiguration in logback によると
- クラスパスから
logback-test.xml
を探す - なければクラスパスから
logback.xml
を探す - なければサービスプロバイダーの仕組みを使って
com.qos.logback.classic.spi.Configurator
の実装クラスがあればそれを使う - なければ
BasicConfigurator
を使う
となっています。
これらの実装をしているのは ContextInitializer です。
ContextInitializer について
設定をしているクラスです。
org.slf4j.LoggerFactory#getLogger
が最初に呼ばれたときに autoConfig メソッドが呼ばれます。
まず findURLOfDefaultConfigurationFile を呼びだしており、ここでxmlファイルを探しています。
findConfigFileURLFromSystemProperties ではシステムプロパティの logback.configurationFile
で指定したxmlファイルを探します。
実装を見ればわかりますがURL, クラスパスのリソース, ファイルパスなどが対応している事がここをみればわかります。
xmlファイルが見つからなかった場合は Configurator
の実装クラスがサービスプロバイダーで指定されているかをさがします。 ここ
あればそれを使い、みつからなければ BasicConfigurator を使います。
中身をみればわかりますが ここではコンソールに出力を行い レイアウトはTTLLLayout
というものを使っているようです。
(「どんな方法で設定読み込んでるんだっけ?」ってなった時は このクラスを見てみるのもよいかも)
設定ファイルのタグとか
どんなものが設定できたっけ って思ったときはこの辺りのクラス名で調べるとよさそう
パターンレイアウトで指定できる内容
マニュアルのPatternLayout を見たほうが早いかもしれないですが
- PatternLayout classicの場合
- PatternLayout accessの場合
のクラスをみるとどのようなものが用意されているかわかります。
ここからそれぞれの Converter
クラスに飛ぶことでどのように値が取得されるか確認することができる。
自前の Converter
を作りたい場合は Creating a custom conversion specifier
を参照
PostCompileProcessorについて
PatternLayoutBase#start で呼ばれており パターンのコンパイルが終わった後に実行されている。
logback-classic
だとPatternLayoutのコンストラクタで EnsureExceptionHandling がセットされている。
EnsureExceptionHandling について
パターンの指定の中で 例外のスタックトレースの指定が漏れていた場合(%ex
, %xEx
, %nopex
, %rootException
) 例外の情報が出力されなくなるのを防ぐためのものっぽい
もし 例外の指定が漏れていた場合は、最後に例外メッセージの出力を追加している。
Filter
ログの出力をフィルタリングするもの。 アペンダー毎に設定でき、また複数設定できる。
継承はしているが 各アペンダーの基底クラスである AppenderBase, UnsynchronizedAppenderBase は FilterAttachableImpl に処理を委譲しており doAppend
が呼ばれたときにフィルタリングがされている。
TurboFilter
ログの出力をフィルタリングするもの。 コンテキスト毎に設定でき、また複数設定できる。
アペンダーと違って、debug
, info
などのメソッドを実行して すぐのあたりで実行されている。
またコンテキストに紐づいているので、全てのアペンダーが影響を受ける
このあたり などで呼ばれている
いずれもTurboFilterList#getTurboFilterChainDecision にたどりつき、ここでフィルタリングをしている。
パラメータは違うが Filter
と仕組みは似たようなもの