tkhrsskの日記

技術ネタなど

(Java) logbackの出力形式のベストプラクティスを考える

まずはドキュメントを読む。

http://logback.qos.ch/manual/layouts_ja.html

ログに出したい要素を考える。

日時は必須。ミリ秒単位までだす。 年月日の区切りはISOをに合わせて - にする。

ファイル名と行番号。 多少性能落ちるけど、やはり便利。 printStackTraceの形式に合わせるなら、クラス名.メソッド名(ファイル名:行番号) 。 Eclipseとかならこれでジャンプできる。

クラス名。 loggerでクラスを指定すれば、負荷が低い。 呼び出し元クラスで出そうとすると、少し負荷がかかる。 メソッド名も少し負荷がかかる。

スレッド名。 マルチスレッド環境ならスレッドが識別できる情報は必須。

ロギングレベル。 必須。見るべき場所をしぼりたい。 レベル毎に出力先ファイルを分割するという手もあるけど、時系列が追いづらい。

メッセージ。当然いる。 grepしやすいように、改行は基本含めない。

MDC(診断コンテキスト) サーバログであれば、クライアントの情報を付与するとよい。 IPアドレスやユーザ識別情報など。 Filterで付与するのがよい。

http://logback.qos.ch/manual/mdc_ja.html

こみこみで書くと下記のような感じか。

%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{0}.%method\(%file:%line\) %mdc %message%n

出力対象について

基本、jdbc.sqltiming は DEBUG で出力するのがよさそう。 jdbc.resultsettable DEBUG も開発中は有効。

https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/ArchitectureInDetail/Logging.html

その他 参考リンク

tomokazu-kozuma.com

amg-solution.jp

blog.tagbangers.co.jp