knowing logback
5047 ワード
Logback
は、log4j
の創始者Ceki Gülcüによって設計されたもう一つのオープンソースログコンポーネントです.logback
公式サイトの説明によると、Logback is intended as a successor to the popular log4j project, picking up where log4j leaves off.
logback
は、log4j
の代わりに最も一般的なログフレームワークになることを目的としている.Cekiがlog4j
を書き換えたカーネルは、log4j
を形成し、いくつかの重要な実行経路におけるlogback
の性能をlogback
より10倍以上向上させる.さらにlog4j
の初期化メモリロードも小さくなりました.周知のように、
logback
は標準的なログインタフェースであり、slf4j
は非常に標準的な実装である.将来的にlogback
を置き換えるのは簡単です.ここではlogbackのいくつかのコンポーネントを見てみましょう.
appender
logback
は、logbackで出力位置を定義するコンポーネントであり、コンソール、ファイル、データベースなどのログ出力の位置を明確にします.appender
のうち2つの最も古典的な実装はlogback
とConsoleAppender
である.それ以外にも、非常に実用的な実装がたくさんあります.例えば、などです.すべての既存の実装が私たちのニーズを満たすことができなければ、logbackはslf 4 jの実装フレームワークとして、非常に良い拡張を提供しています.
もし私たちが自分でappenderを実現する必要があるならば、私たちは新しいクラスを書いて、
FileAppender
を継承すればいいです.public class CountingConsoleAppender extends AppenderBase {
public void append(ILoggingEvent event) {
// export the log to custom place
}
}
Encoder
AppenderBase
はlogbackにログをどこに送るかを伝える責任を負い、次に紹介するカラムコンポーネントのいくつかをどのように表示するかを担当し、appender
コンポーネントはログイベントをバイナリストリームの形式に変換して対応する位置に伝える責任を負います.構成でデフォルトで使用される
Encoder
タイプはEncoder
です.layout
ch.qos.logback.classic.encoder.PatternLayoutEncoder
はログ・ストリームの伝達を担当し、Encoder
はログを私たちの習慣に基づいて読むことができる文字に変換する責任を負います.これも、構成layout
の中で最もカスタマイズが必要な部分です.最も一般的なシーンは
logback
というクラスを使用しています.普段私たちが構成で使用している構成
ch.qos.logback.classic.PatternLayout
のラベルはこのクラスです.
%d{yyyy-MM-dd HH:mm:ss} |-%-5level ${PID:- } in %-50(%logger[%thread]) : %msg%n
構成内の特定のテンプレート変換語はlogbackの説明を参照できます(http://logback.qos.ch/manual/layouts.html#conversionWord).
filter
logbackでは、自分のニーズに合わせて対応するルールをカスタマイズし、ログをフィルタリングし、チェック時のエラー情報を減らすことができます.このフィルタリングルールのカスタマイズを完了したコンポーネントは
pattern
です.各フィルタは
filter
メソッドを実装します.このメソッドはdecide()
列挙クラスオブジェクトを返します.FilterReply
にはDENY、NEUTRAL、ACCEPTの3種類があります.FilterReply
の中で最もよく使われるのはfilter
かもしれません.LevelFilter
は、指定されたログのレベルをフィルタするのに役立ちます.例えば、私は
LevelFilter
のセットに2つのAPPENDER
を入れます.
INFO
ACCEPT
NEUTRAL
ERROR
ACCEPT
DENY
この上の構成では、各ログがINFOレベルのログかどうかをチェックされ、もしそうであれば受け入れられ、そうでなければ次の
filter
に捨てられ、2番目のfilter
はERRORレベルかどうかをチェックし始め、レベルがログであれば印刷され、そうでなければ日誌は破棄される.filter
を実装したい場合は、filter
を継承するクラスを定義できます.ch.qos.logback.classic.filter.Filter
種類の中で自分のルールを書けばいいです.自分で定義した
decide()
もfilter
のようにLevelFilter
とonMatch
の2つのラベルを使用することを望む場合は、onMismatch
というクラスを継承することを選択できます.Spring Bootとlogback
ch.qos.logback.classic.filter.AbstractMatcherFilter
成熟したSpring Boot
システムを借りて、Java生態の中で大ブレイクし、Spring
もSpring Boot
を自分のデフォルトログ処理の枠組みとした.一般的に
logback
のプロファイルはlogback
として取り込まれますが、Spring BootでSpringBootの一部のプラグインを使用する必要がある場合は、logback.xml
にプラグインのプロファイルファイル名を設定する必要があります.logback-spring.xml
がロードされるタイミングが早すぎるため、Springはまだlogbackの構成を開始していないため、完了していません.logback.xml
が主に解決する問題は配置問題であり、Spring Boot
ではまず配置を読み取るのが面倒である.logback
は、プラグインSpring Boot
を提供します.
${fluentHost}
...
これにより、構成ファイルは、
springProperty
ファイルから対応する構成を自動的に読み取り、application.properties
でこれらの変数を使用します.logback
jarの目的のために、Spring Boot
はSpring Boot
のプラグインを提供しています.
これにより、
springProfile
は、logback
が当時置かれていた環境に応じて、対応する構成に切り替わる.