Я создал аннотацию Benchmark
, которая дает время выполнения вызова метода с использованием Stopwatch
. Аннотация Benchmark
имеет атрибут isEnabled
, который по умолчанию равен true
. Что я хочу, так это то, что даже если для некоторого метода установлено значение false
, если уровень ведения журнала равен DEBUG
, будет проведен сравнительный анализ. Есть ли способ при весенней загрузке получить текущий уровень ведения журнала приложения. Я знаю, что мы можем включить несколько уровней ведения журнала для разных пакетов. Если для текущего пакета или модуля уровень ведения журнала установлен на DEBUG, тест должен быть выполнен. Вот как выглядит моя Benchmark
аннотация:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Benchmark {
boolean isEnabled() default true;
}
Аспект, который выполняет сравнительный анализ, выглядит следующим образом:
@Aspect
@Component
public class BenchmarkingAspect {
@Around("@annotation(benchmark)")
public Object benchmarkMethodRuntimeAspect(ProceedingJoinPoint proceedingJoinPoint, Benchmark benchmark) throws Throwable {
if (benchmark.isEnabled()) {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Object returnedValue = proceedingJoinPoint.proceed();
stopWatch.stop();
log.info("Benchmarked: {} from class {}", proceedingJoinPoint.getSignature().getName(),
proceedingJoinPoint.getTarget().getClass().getCanonicalName());
log.info(stopWatch.prettyPrint());
return returnedValue;
} else {
return proceedingJoinPoint.proceed();
}
}
}