5

私は、この現在のプロジェクトで、すでにしばらくの間完了しているコード(JAVA)に大量のトレースロギングを書き込むポリシーを実装する必要がある会社と協力してきました。

すべてのメソッドにコード行のようなlogger.log('desired values')を書き込むためだけに、すべてのメソッドを変更しないようにしています。逆効果です。

コードの多くを変更せずに、メソッド名、それが受け取ったパラメーターをログに記録する一般的な方法はありますか?私はアノテーションなどを研究してきましたが、パラメータの異なるメソッドがたくさんあるので、良い解決策を思いつくことができませんでした。

編集1:プロジェクトはEclipseで開発されています。LiferayとJBossを使用してポータルでいくつかの変更を行っています。

編集2:私はここで私に与えられた解決策に従い、インターセプターを使用しました。既存のメソッドに加えなければならなかった唯一の変更は、それらにアノテーションを追加することでした。これは非常に受け入れられました。詳細については、次のリンクで検索してください:http: //docs.oracle.com/javaee/6/tutorial/doc/gkeed.html

4

4 に答える 4

6

最良の方法は、AOPおよびJavaアノテーションを使用することです。jcabi-aspects@LoggableのアノテーションとAspectJアスペクトを使用することをお勧めします(私は開発者です):

@Loggable(Loggable.DEBUG)
public String load(URL url) {
  return url.openConnection().getContent();
}
于 2013-02-03T08:14:01.190 に答える
3

「ウィンドウ」->「設定」に移動し、「Java」->「エディター」->「テンプレート」を選択し、パターンを使用して「logmeth」という名前の新しいテンプレートを作成します。

if(logger.isDebug())logger.debug("${exception_variable_name} ${return_type} "+getClass().getName()+"${enclosing_method}(${enclosing_method_arguments})"+String.format("***",${enclosing_method_arguments}));

OKを押します。

Java Editorでlogmethを記述し、Strg+ space+を押すspaceEnter、Eclipseは次のように記述します。

if(logger.isDebug())logger.debug("e boolean hasFuture(man, woman)"
            + String.format("***", man, woman));

Eclipseはとてもクールです。

于 2012-10-30T10:44:18.753 に答える
2

インターセプターhttp://docs.oracle.com/javaee/6/tutorial/doc/gkeed.htmlを使用して、コードを変更せずにパブリック メソッドの呼び出しをインターセプトできますが、この手法を非パブリック メソッドで使用することはできません。

于 2012-10-30T10:24:40.167 に答える
1

AOPを見てください。実行時にコードを挿入できるため、各メソッドの前後にログを追加できます。

于 2012-10-30T10:16:50.827 に答える