Получить уровень ведения журнала в весенней загрузке приложения - PullRequest
2 голосов
/ 18 октября 2019

Я создал аннотацию 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();
        }
    }
}

1 Ответ

2 голосов
/ 18 октября 2019

Я думаю, вы можете просто сделать;

Logger targetLogger = LoggerFactory.getLogger(proceedingJoinPoint.getTarget().getClass())
if (targetLog.isDebugEnabled()) {
    // apply your logic here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...