在AOP Logger中定义类名

时间:2018-02-15 17:08:00

标签: spring spring-boot log4j aop spring-aop

你能告诉我是否有可能通过Spring Boot AOP Logger在控制台包和类名中定义实际代理?

为了更好地理解这里是我的控制台的截图:

enter image description here

正如您所看到的,我的记录器有包名和类名,但我的目标却是c.s.b.c.MyAspectOrientedLogger,例如c.s.b.s.UserService

我的记录器:

@Aspect
@Component
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class MyAspectOrientedLogger {

    private Logger lgr = LoggerFactory.getLogger(this.getClass());

    @Around("...")
    public Object logFunctions(ProceedingJoinPoint joinPoint) throws Throwable {

        Object proceed = joinPoint.proceed();
        LOGGER.debug("My some logging output ...");
        return proceed;
    }

我知道我可以使用joinPoint.getTarget().getClass()并打印该名称,但我想要它而不是记录器类。可能吗?感谢

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。 joinPoint参数提供了一个名为getSignature的方法,该方法再次提供方法getDeclaringType,该方法返回方法类的类对象,其中包含该方面。

你可以像这样使用它:

    Class type = joinPoint.getSignature().getDeclaringType();

    Logger lgr = LoggerFactory.getLogger(type);

    Object proceed = joinPoint.proceed();
    lgr.error("My some logging output ...");

然而,结果是,您无法静态获取记录器,您必须从方面本身获取工厂中的实例。我不确定这样的解决方案中的性能缺陷,如果编写重负载应用程序,则必须对其进行测试。