私は、多くのトレース ログを作成するポリシーを持つ会社のコードベースで作業してきました。したがって、ほとんどすべてのメソッドには、次のように始まるコードがあります。
String LOG_METHOD = "nameOfMethod(String,List<Long>):void";
if(logger.isTraceEnabled()) {
Object[] params = new Object[] { string, list };
logger.trace(CompanyMessages.newMethodInstanceMessage(this, LOG_METHOD, params));
}
そして、次のように終了します(finally
-clause またはメソッドの最後で:
if(logger.isTraceEnabled()) {
logger.trace(CompanyMessages.leaveMethodInstanceMessage(this, LOG_METHOD));
}
実際にはもっと多くのコードがありますが、これが基本的な考え方です。CompanyMessages
これはコードを乱雑にし、他のコーダーは、監視ツールが読み取るメッセージをフォーマットするために必要な特定のクラスを使用しない独自の解釈で常に混乱させています。したがって、上記のすべての@LogBefore('logLevel')
コードを削除し、 &のような注釈を使用してトレース ログを必要とするすべてのメソッドを提供する方法を探してい@LogAfter('logLevel')
ます。
私がこのソリューションを選択した理由は、他の開発者が新しいことを学ぶ必要がなく、コードの代わりに注釈を使用できるようにするためです。私は、何百もの Web アプリケーションと何十人もの開発者を展開するサーバー環境で働いています。そのため、余分なコーディングや大規模なライブラリを追加せずに、これを Web アプリケーションに実装する方法を探していました。これは、私が提案したものと同様のアノテーションを使用し、各 Web アプリケーションで簡単に構成できる、小さくて安定した AOP 実装を探していることを意味します。パフォーマンスも重要です。これを AOP で実装する最も簡単な例は何ですか?
編集:探しているものと非常によく似たものを見つけましたが、これにはいくつかの問題があります。ロギングが必要なすべてのクラスを構成する必要があります。これは、注釈を使用するだけでなく、より多くのリソースを消費します。スプリング構成はそれ<aop:aspectj-autoproxy/>
を修正しますか?