原文链接:https://my.oschina.net/mengzhang6/blog/2395893
关于一次AOP拦截入参记录日志报错的梳理总结
将服务发布到tomcat中后,观察服务的运行状态以及日志记录状况; 发现有如下一个问题:
2018-10-31 16:20:10,701 [] INFO aspect.PayMethodLogAspectJ - rest 请求开始{1540974010700}:clazzName: com.yuantu.unified.pay.openapi.OpenApiRest, methodName:preOrder, 参数:[Ljava.lang.Object;@49ffa5bd 2018-10-31 16:20:10,790 [] INFO aspect.PayMethodLogAspectJ - rest 返回结束{1540974010700}::clazzName: com.yuantu.unified.pay.openapi.OpenApiRest, methodName:preOrder, 结果:{"msg":"subCorpNo{3701011318}","resultCode":"101","startTime":1540974010785,"success":false,"timeConsum":0},耗时毫秒数 89
日志中记录入参并没有详细的记录下来,而是记录了一个Object,这样的日志在将来的查询问题的时候是不可用的,遂进行检查代码查找问题;
代码如下:
@Around("within(com.yuantu.unified.pay.openapi..*) || within(com.yuantu.unified.pay.rest..*)") public Object setCorporation(ProceedingJoinPoint joinPoint) throws Throwable { String classType = joinPoint.getTarget().getClass().getName(); Class<?> clazz = Class.forName(classType); String clazzName = clazz.getName(); String methodName = joinPoint.getSignature().getName(); Long logId = System.currentTimeMillis(); Object[] args = joinPoint.getArgs(); String paramter = ""; if (args != null) { try { paramter = JSON.toJSONString(args); } catch (Exception e) { paramter = args.toString(); } } Long currentTime = System.currentTimeMillis(); logger.info("rest 请求开始{" + logId + "}:clazzName: " + clazzName + ", methodName:" + methodName + ", 参数:" + paramter); Object proceed = Result.createFailResult(); try { proceed = joinPoint.proceed(args); } catch (Exception e) { proceed = Result.createFailResult("系统异常,请及时与我们联系,以便及时解决。错误类型:" + e.getClass