現在、Java.util.logging
を使用して、各メソッドのエントリポイントと終了ポイントをJavaプロジェクトに記録しています。これはデバッグ時に非常に役立ちます。
各コードの冒頭にこのコードを配置し、最後に同様のコードを配置しています。
if (logger.isLoggable(Level.FINER)) {
logger.entering(this.getClass().getName(), "methodName");
}
ここで、「methodName」はメソッドの名前です(ハードコード)。
すべてのメソッドにこのコードを含める必要なしに、これを自動的に行う方法があるかどうか疑問に思っていました。
アスペクト指向プログラミングの使用をお勧めします。
たとえば、 AspectJ コンパイラー(Eclipse、EmacsなどのIDEに統合できます)を使用して、次のようなコードを作成できます。
aspect AspectExample {
before() : execution(* Point.*(..))
{
logger.entering(thisJoinPointStaticPart.getSignature().getName(), thisJoinPointStaticPart.getSignature().getDeclaringType() );
}
after() : execution(* Point.*(..))
{
logger.exiting(thisJoinPointStaticPart.getSignature().getName() , thisJoinPointStaticPart.getSignature().getDeclaringType() );
}
}
このアスペクトは、「Point」クラスのすべてのメソッドの実行の前後にロギングコードを追加します。
アスペクト指向プログラミング を見てください。私は Spring AOP または AspectJ をあなたが見るべきものとして提案するでしょう。
また、これは Spring AOPでのロギング の使用を開始するのに役立つ簡単なチュートリアルです。
すでに示唆したように、AOPは @Loggable
jcabi-aspects からの注釈(私は開発者です):
@Loggable(Loggable.DEBUG)
public String load(URL url) {
return url.openConnection().getContent();
}
ライブラリには、これらの注釈を理解し、SLF4Jを介してメソッド呼び出し、それらの引数、および実行時間を自動的に記録するAOPアスペクトも含まれています。
また、詳細を説明しているこのブログ投稿を確認してください: http://www.yegor256.com/2014/06/01/aop-aspectj-Java-method-logging.html
slf4j を見てみましたか?メソッド名を自動的に収集できる LocationAwareLogger があります。
アスペクト指向プログラミング 、特に定義で修飾したいメソッドの入り口と出口を記録するのに役立つaround()
結合点を確認する必要があります。