在Spring Boot应用程序中获取日志记录级别

时间:2019-10-18 04:03:30

标签: java spring-boot logging

我创建了一个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();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

我认为你可以做到;

Logger targetLogger = LoggerFactory.getLogger(proceedingJoinPoint.getTarget().getClass())
if (targetLog.isDebugEnabled()) {
    // apply your logic here
}