私の組織では、ロギングに関するいくつかのルール/ギルドラインをまとめました。これについて、追加またはコメントできるかどうかを知りたいと思います。
私たちはJavaを使用していますが、一般的にlogginについてコメントすることができます-ルールとアドバイス
正しいログレベルを使用する
- エラー:何かが非常に間違っているため、すぐに修正する必要があります
- 警告:プロセスは修正せずに続行できます。アプリケーションはこのレベルを許容する必要がありますが、警告は常に調査する必要があります。
- 情報:重要なプロセスが終了したという情報
- デバッグ。開発時にのみ使用されます
何をログに記録しているかを確認してください。
ロギングがアプリケーションの動作に影響を与えないようにします
ロギングの機能は、ログにメッセージを書き込むことです。
- ログメッセージは、説明的で、明確で、短く、簡潔でなければなりません。
トラブルシューティングの際にナンセンスなメッセージはあまり使用されません。
- log4jに適切なプロパティを配置する
適切なメソッドとクラスが自動的に記述されることを入れてください。
例:
Datedfile -web
log4j.rootLogger=ERROR, DATEDFILE
log4j.logger.org.springframework=INFO
log4j.logger.waffle=ERROR
log4j.logger.se.prv=INFO
log4j.logger.se.prv.common.mvc=INFO
log4j.logger.se.prv.omklassning=DEBUG
log4j.appender.DATEDFILE=biz.minaret.log4j.DatedFileAppender
log4j.appender.DATEDFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATEDFILE.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%C{1}.%M] - %m%n
log4j.appender.DATEDFILE.Prefix=omklassning.
log4j.appender.DATEDFILE.Suffix=.log
log4j.appender.DATEDFILE.Directory=//localhost/WebSphereLog/omklassning/
- ログ値。
アプリケーションから値を記録してください。
- ログプレフィックス。
アプリケーションのどの部分からロギングが書き込まれるかを、できればプロジェクトで合意された接頭辞などを使用して記述してください。 PANDORA_DB
- テキストの量。
ロギングテキストが多くなりすぎないように注意してください。アプリのパフォーマンスに影響を与える可能性があります。
- ロギング形式:
-log4jで使用するいくつかのバリアントとメソッドがありますが、例外をログに記録する場合は、次の形式を統一して使用したいと思います。
logger.error("PANDORA_DB2: Fel vid hämtning av frist i
TP210_RAPPORTFRIST", e);
上記の例では、log4jプロパティを設定して、クラスとメソッドを自動的に書き込むと想定しています。
次のものではなく、常にロガーを使用します。
System.out.println(), System.err.println(), e.printStackTrace()
Webアプリケーションがフレームワークを使用する場合、ハンドラーでtry-catchを使用し、上記のモデルに従ってログを記録すると、EJBから非常に詳細なエラー情報を取得できます。
このプロジェクトでは、この変換パターンを使用して、メソッド名とクラス名を自動的に書き出します。ここでは、コンソールとdatedfileappenderに2つの異なるパテントを使用します。
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.DATEDFILE.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
上記の例の両方で、メソッドとクラスは書き出されます。コンソールには行番号も書き込まれます。
toString()
toString()
すべてのオブジェクトに対応してください。例:
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(" DwfInformation [ ");
sb.append("cc: ").append(cc);
sb.append("pn: ").append(pn);
sb.append("kc: ").append(kc);
sb.append("numberOfPages: ").append(numberOfPages);
sb.append("publicationDate: ").append(publicationDate);
sb.append("version: ").append(version);
sb.append(" ]");
return sb.toString();
}
これらの出力を行う特別な方法の代わりに
public void printAll()
{
logger.info("inbet: " + getInbetInput());
logger.info("betdat: " + betdat);
logger.info("betid: " + betid);
logger.info("send: " + send);
logger.info("appr: " + appr);
logger.info("rereg: " + rereg);
logger.info("NY: " + ny);
logger.info("CNT: " + cnt);
}
ロギングを使用するこれらの方法で、追加、コメント、または疑問を感じることができるものはありますか?Javaに関連していない場合でも、お気軽に回答またはコメントしてください。Javaとlog4jは、これがどのように推論されるかの単なる実装です。