1

エラーまたは致命的なレベルのメッセージをログに記録するときに、このライブラリを使用する開発者にテキスト ID を含めることを強制したい (内部) ライブラリを開発しています。log4j を変更しないと、強制したいことは次のようになります。

logger.error( "E1234:エラーが発生しました" );

log4j への拡張がまったくないかマイナーな場合は、ナイトリー ビルド中にソース コードをスキャンしてテキスト ID が含まれていることを確認するか、実行時にそれを確認する log4j アペンダーを実装することができます。

ただし、error-method に追加の引数を追加することをお勧めします。例えば:

logger.error( "E1234", "エラーが発生しました" );

これは、log4j Logger クラスのファサード クラスを実装することで処理できます。

他の誰かに同様の問題がありましたか? あなたの解決策は何ですか?ここでは、最初のコード例を優先します。将来的には、夜間のビルド中に実行するコード アナライザーを実装する可能性があります (または、error() メソッド呼び出しから不足しているテキスト ID を検出するように構成できる既存のコード アナライザーについて知っている人はいますか?)

4

1 に答える 1

6

次のような複合キーは避けてください:「E1234:エラーが発生しました」

私は使うだろう

public enum Error {
 E1234("E1234", "An error has occured"),
 E1245("E1235", "Other error has occured"),
 private final String code;
 private final String description;
 Error(code, description) {
   this.code;
   this.description = description
 }
 @Override
 public String toString() {
   return this.code + ": " + this.description;
 }
}

次に、エラーを受け入れるメソッドを使用して独自のインターフェイスを作成できます。

public interface MyLogger {
 void error(Error);
 void info(Error);
 void warn(Error);
 void debug(Error);
}

次に、それを実装し、log4jの実際のロギングジョブに委任します。これは、開発者が問題を回避するのに役立ちます。

于 2009-02-25T14:48:12.890 に答える