0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

logbackの雑なメモ

Last updated at Posted at 2022-07-18

logback のドキュメントとソースを読んだメモ

調べたバージョンは 1.2.11logback-classic のメモです

設定ファイル クラスの読み込み

マニュアルのConfiguration in logback によると

  1. クラスパスから logback-test.xml を探す
  2. なければクラスパスから logback.xml を探す
  3. なければサービスプロバイダーの仕組みを使って com.qos.logback.classic.spi.Configurator の実装クラスがあればそれを使う
  4. なければ BasicConfigurator を使う

となっています。

これらの実装をしているのは ContextInitializer です。

ContextInitializer について

設定をしているクラスです。

org.slf4j.LoggerFactory#getLogger が最初に呼ばれたときに autoConfig メソッドが呼ばれます。

まず findURLOfDefaultConfigurationFile を呼びだしており、ここでxmlファイルを探しています。

findConfigFileURLFromSystemProperties ではシステムプロパティの logback.configurationFile で指定したxmlファイルを探します。

実装を見ればわかりますがURL, クラスパスのリソース, ファイルパスなどが対応している事がここをみればわかります。

xmlファイルが見つからなかった場合は Configuratorの実装クラスがサービスプロバイダーで指定されているかをさがします。 ここ
あればそれを使い、みつからなければ BasicConfigurator を使います。

中身をみればわかりますが ここではコンソールに出力を行い レイアウトはTTLLLayout というものを使っているようです。

(「どんな方法で設定読み込んでるんだっけ?」ってなった時は このクラスを見てみるのもよいかも)

設定ファイルのタグとか

どんなものが設定できたっけ って思ったときはこの辺りのクラス名で調べるとよさそう

パターンレイアウトで指定できる内容

マニュアルのPatternLayout を見たほうが早いかもしれないですが

のクラスをみるとどのようなものが用意されているかわかります。
ここからそれぞれの Converter クラスに飛ぶことでどのように値が取得されるか確認することができる。

自前の Converter を作りたい場合は Creating a custom conversion specifier
を参照

PostCompileProcessorについて

PatternLayoutBase#start で呼ばれており パターンのコンパイルが終わった後に実行されている。

logback-classic だとPatternLayoutのコンストラクタEnsureExceptionHandling がセットされている。

EnsureExceptionHandling について

パターンの指定の中で 例外のスタックトレースの指定が漏れていた場合(%ex, %xEx, %nopex, %rootException) 例外の情報が出力されなくなるのを防ぐためのものっぽい

もし 例外の指定が漏れていた場合は、最後に例外メッセージの出力を追加している。

Filter

ログの出力をフィルタリングするもの。 アペンダー毎に設定でき、また複数設定できる。

継承はしているが 各アペンダーの基底クラスである AppenderBase, UnsynchronizedAppenderBaseFilterAttachableImpl に処理を委譲しており doAppend が呼ばれたときにフィルタリングがされている。

TurboFilter

ログの出力をフィルタリングするもの。 コンテキスト毎に設定でき、また複数設定できる。

アペンダーと違って、debug, info などのメソッドを実行して すぐのあたりで実行されている。
またコンテキストに紐づいているので、全てのアペンダーが影響を受ける

このあたり などで呼ばれている

いずれもTurboFilterList#getTurboFilterChainDecision にたどりつき、ここでフィルタリングをしている。

パラメータは違うが Filter と仕組みは似たようなもの

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?