AspectJ - 如何记录覆盖方法名称而不是超类方法名称
AspectJ - How to log overriden method name instead of superclass method name
我已经为我的所有存储库、服务和控制器构建了一个记录器 class。我正在使用以下方法记录每个方法调用:
@Before("execution(* com.mdenis.tno..controller..*(..)) || " +
"execution(* com.mdenis.tno..service..*(..)) || " +
"execution(* com.mdenis.tno..repository..*(..))")
private void logMethodCallWithParameters(JoinPoint joinPoint)
{
String arguments = "";
for (Object argument : Arrays.asList(joinPoint.getArgs()))
{
arguments = arguments + argument.toString() + ", ";
}
if (arguments.contains(", "))
{
arguments = arguments.substring(0, arguments.lastIndexOf(","));
}
if (arguments.compareTo("") == 0)
{
logger.debug("Method " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()
+ " called with no argument");
}
else
{
logger.debug("Method " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()
+ " called with argument(s) " + arguments);
}
}
这很好用,但我的服务都扩展了一个包含通用方法的基本服务。因此,调用 PostServiceImpl 中的方法会产生以下日志语句:
Method com.mdenis.tno.service.impl.BaseServiceImpl.findAllPaginated returning with result Page 1 of 2 containing com.mdenis.tno.model.Post instances.
我想知道是否有办法记录扩展 class 名称 (PostServiceImpl) 而不是超级class 名称 (BaseServiceImpl)。
谢谢!
您使用
joinPoint.getTarget().getClass().getCanonicalName()
为 class 姓名。
我已经为我的所有存储库、服务和控制器构建了一个记录器 class。我正在使用以下方法记录每个方法调用:
@Before("execution(* com.mdenis.tno..controller..*(..)) || " +
"execution(* com.mdenis.tno..service..*(..)) || " +
"execution(* com.mdenis.tno..repository..*(..))")
private void logMethodCallWithParameters(JoinPoint joinPoint)
{
String arguments = "";
for (Object argument : Arrays.asList(joinPoint.getArgs()))
{
arguments = arguments + argument.toString() + ", ";
}
if (arguments.contains(", "))
{
arguments = arguments.substring(0, arguments.lastIndexOf(","));
}
if (arguments.compareTo("") == 0)
{
logger.debug("Method " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()
+ " called with no argument");
}
else
{
logger.debug("Method " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()
+ " called with argument(s) " + arguments);
}
}
这很好用,但我的服务都扩展了一个包含通用方法的基本服务。因此,调用 PostServiceImpl 中的方法会产生以下日志语句:
Method com.mdenis.tno.service.impl.BaseServiceImpl.findAllPaginated returning with result Page 1 of 2 containing com.mdenis.tno.model.Post instances.
我想知道是否有办法记录扩展 class 名称 (PostServiceImpl) 而不是超级class 名称 (BaseServiceImpl)。
谢谢!
您使用
joinPoint.getTarget().getClass().getCanonicalName()
为 class 姓名。