你能告诉我是否有可能通过Spring Boot AOP Logger在控制台包和类名中定义实际代理?
为了更好地理解这里是我的控制台的截图:
正如您所看到的,我的记录器有包名和类名,但我的目标却是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()
并打印该名称,但我想要它而不是记录器类。可能吗?感谢
答案 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 ...");
然而,结果是,您无法静态获取记录器,您必须从方面本身获取工厂中的实例。我不确定这样的解决方案中的性能缺陷,如果编写重负载应用程序,则必须对其进行测试。