SLF4J はロギング API ファサードです。アプリケーションコードは slf4j-api に依存し、
デプロイ時に Log4j 2 や Logback など互換性のあるプロバイダーを 1 つ選択します。
SLF4J 2 は ServiceLoader でプロバイダーを検出するため、1 つだけ保持します。
Log4j 2 では log4j-slf4j2-impl が SLF4J を Log4j Core に適合させます。
log4j-to-slf4j と組み合わせてはいけません。イベントがファサードへ再入し、
ブリッジループを形成するためです。
private static final Logger log = LoggerFactory.getLogger(Orders.class);
log.info("Accepted order {}", orderId);
log.warn("Order {} failed validation", orderId, exception);パラメーター化されたメッセージは、レベルが無効な間のフォーマット処理を遅延させます。 スタックトレースをテキストへ埋め込むのではなく、明示的な例外引数を使用します。
階層と設定 #
ロガー名はドット区切りの階層を形成します。子に設定レベルがない場合は、最も近い
設定済みのレベルを継承します。Log4j 2 の一般的な順序付きレベルは TRACE、
DEBUG、INFO、WARN、ERROR、FATAL です。Log4j 2 は一致する LoggerConfig
を通じてイベントをルーティングし、デフォルトでは祖先のアペンダーにも渡します。
専用アペンダーから親アペンダーへも渡してはならない場合にだけ
additivity="false" を設定してください。そうしないとイベントが重複します。
アペンダーは宛先であり、レイアウトはイベントをシリアライズします。Log4j Core は
コンソール、ローリングファイル、ソケットなどのアペンダーと、パターンおよび JSON
レイアウトを提供します。プラグインシステムは @Plugin 拡張型を検出し、設定要素を
対応する実装へ対応付けます。設定検出は明示的な log4j2.configurationFile を優先し、
次にクラスパスの規約を使用します。パッケージングが曖昧になり得る場合は、本番用の
場所を明示してください。
Log4j 2 は monitorInterval を使ってローカル設定を監視できます。再読み込みは稼働中
システムを変更するため、デプロイ時に設定を検証し、再読み込みによって一時的に安全
でないレベル、宛先、認証情報が選択されないようにします。
運用データ #
相関 ID と安定したリクエストメタデータを SLF4J MDC/Log4j Thread Context に配置し、
finally ブロックとエグゼキューターラッパーでコンテキストを消去してリクエスト間の
漏洩を防ぎます。バックエンドでインデックス化できる場合は構造化フィールドを優先
します。パスワード、トークン、セッション識別子、秘密鍵、未編集の個人データは決して
ログに記録せず、ログイベントを構築する前にマスキングします。ロギング設定は実行可能な
運用ポリシーであるため、設定の書き込みとプラグインのロードを制限します。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)