我创建了一个Benchmark
批注,该批注给出了使用Stopwatch
进行方法调用的时间。 Benchmark
批注具有属性isEnabled
,默认情况下为true
。我想要的是即使某个方法的值设置为false
,如果日志记录级别为DEBUG
,也要进行基准测试。 Spring Boot中是否有一种方法可以获取应用程序的当前日志记录级别。我知道我们可以为不同的软件包启用多个日志记录级别。如果对于当前软件包或模块,日志记录级别设置为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();
}
}
}
答案 0 :(得分:2)
我认为你可以做到;
Logger targetLogger = LoggerFactory.getLogger(proceedingJoinPoint.getTarget().getClass())
if (targetLog.isDebugEnabled()) {
// apply your logic here
}