Мы используем аннотации AspectJ и Java для этой цели. Если нам нужно знать время выполнения для метода, мы просто аннотируем его. Более продвинутая версия может использовать собственный уровень журнала, который можно включить и отключить во время выполнения.
public @interface Trace {
boolean showParameters();
}
@Aspect
public class TraceAspect {
[...]
@Around("tracePointcut() && @annotation(trace) && !within(TraceAspect)")
public Object traceAdvice ( ProceedingJintPoint jP, Trace trace ) {
Object result;
// initilize timer
try {
result = jp.procced();
} finally {
// calculate execution time
}
return result;
}
[...]
}