javaでメソッド毎に、引数にわたされた値や処理時間をログに出そうとした場合、AOPを使うのがよくあるようです。メソッド毎にloggerの記述を書くのは読みづらくもなってげんなりなので、どこかにまとめて書ける仕組みはありがたいです。
あたりみたいです。この記事 がかなり参考になります。
AspectJ
あるパッケージのpublicメソッドをロギングしたい場合は次のような感じです。
@Around("execution(public * hoge.*.*(..))")
public Object logging(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
String method = proceedingJoinPoint.getSignature().toShortString();
try {
logger.info("START {}", method);
return proceedingJoinPoint.proceed();
} catch (Throwable t) {
logger.warn("{} failed.", method);
throw t;
} finally {
stopWatch.stop();
logger.info("END {}", method);
}
}
}
jcabi-aspects
これは簡単で、ログをとりたいメソッドに@Loggable
をつけるだけです
@Loggable
public int doSomething(int a) {
...
}
これで次のように出力されます。
[INFO] com.example.Foo #doSomething(10): 200 in 12μs
フレームワークなどで用意されていなかったら、こういうので補うと良さそうです。
参考サイト