gpt4 book ai didi

java - 使用 Spring AOP 记录方法条目

转载 作者:行者123 更新时间:2023-12-02 00:59:35 24 4
gpt4 key购买 nike

任何人都知道如何在跟踪级别使用 Spring AOP 和 log4j 记录方法条目(包括参数值)并退出。它应该能够记录来自多个包的类。

最佳答案

您可以使用@Around(..)方面来达到这样的目的:

@Component
@Aspect
@Order(value=2)
public class LoggingAspect {

@Around("execution(* com.blablabla.server..*.*(..))")
public Object logMethod(ProceedingJoinPoint joinPoint) throws Throwable{
final Logger logger = LoggerFactory.getLogger(joinPoint.getTarget().getClass().getName());
Object retVal = null;

try {
StringBuffer startMessageStringBuffer = new StringBuffer();

startMessageStringBuffer.append("Start method ");
startMessageStringBuffer.append(joinPoint.getSignature().getName());
startMessageStringBuffer.append("(");

Object[] args = joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
startMessageStringBuffer.append(args[i]).append(",");
}
if (args.length > 0) {
startMessageStringBuffer.deleteCharAt(startMessageStringBuffer.length() - 1);
}

startMessageStringBuffer.append(")");

logger.trace(startMessageStringBuffer.toString());

StopWatch stopWatch = new StopWatch();
stopWatch.start();

retVal = joinPoint.proceed();

stopWatch.stop();

StringBuffer endMessageStringBuffer = new StringBuffer();
endMessageStringBuffer.append("Finish method ");
endMessageStringBuffer.append(joinPoint.getSignature().getName());
endMessageStringBuffer.append("(..); execution time: ");
endMessageStringBuffer.append(stopWatch.getTotalTimeMillis());
endMessageStringBuffer.append(" ms;");

logger.trace(endMessageStringBuffer.toString());
} catch (Throwable ex) {
StringBuffer errorMessageStringBuffer = new StringBuffer();

// Create error message with exception
logger.error(errorMessageStringBuffer.toString(), ex);
throw ex;
}

return retVal;
}
}

在此示例中,方面记录了 com.blablabla.server 包下所有子包的所有方法调用。它还记录所有方法输入参数。

关于java - 使用 Spring AOP 记录方法条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11881148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com