外贸网站 服务器,ios网站开发教程,类模板模板下载网站,搞一个网站要多少钱使用场景#xff1a;
可以通过 AOP , 以 控制层 controller 所在的包为切点#xff0c; 在 controller 的方法前后打印日志#xff0c;这样就能统计出接口的耗时#xff0c;还能打印入参#xff0c;出参#xff0c;减少重复地打印日志。
如果想统计 dao 层的入参和耗时…使用场景
可以通过 AOP , 以 控制层 controller 所在的包为切点 在 controller 的方法前后打印日志这样就能统计出接口的耗时还能打印入参出参减少重复地打印日志。
如果想统计 dao 层的入参和耗时也可以用类似的方法。
代码示例
Aspect
Component
public class RequestLogAop {/*** 定义切点 切点为 com.example.demo..controller 下所有的类** 第一个 controller.* 表示命名为controller的包下的任意类* 第二个 * 表示任意方法。* .. 表示匹配任意数量任意类型的参数。*/Pointcut(execution(* com.example.demo..controller.*.*(..)))public void pointcut() {}/*** 环绕通知。在方法的前后打印日志。*/Around(value pointcut())public Object webLogAround(ProceedingJoinPoint joinPoint) throws Throwable {// 类名称示例com.example.demo.controller.OrderTestControllerString className joinPoint.getTarget().getClass().getName();MethodSignature signature (MethodSignature) joinPoint.getSignature();// 方法名称示例com.example.demo.controller.OrderTestController#get// 可以选中方法后根据idea快捷键 ctrlaltshiftc复制方法然后搜索日志。反之亦可。String methodName className # signature.getMethod().getName();long start System.currentTimeMillis();//过滤无法序列化的参数类型Object[] objects filterArgs(joinPoint.getArgs());//在方法执行前打印日志log.info(class method: {} , parameter:{}., methodName, JSON.toJSONString(objects));Object proceed joinPoint.proceed();//在方法执行后打印日志//如果还需要打印接口的返回值就打印 JSON.toJSONString(proceed)log.info(class method: {} , takes time: {}ms.,methodName, (System.currentTimeMillis() - start));return proceed;}/*** 过滤无法序列化的参数类型** param args* return*/private Object[] filterArgs(Object[] args) {Object[] results new Object[args.length];for (int i 0; i args.length; i) {if (args[i] instanceof ServletRequest || args[i] instanceof ServletResponse || args[i] instanceof MultipartFile) {//ServletRequest不能序列化从入参里排除否则报异常continue;}results[i] args[i];}return results;}}显示日志
[INFO ] 2023-11-14 23:41:36 c.example.demo.config.RequestLogAop 43: class method: com.example.demo.controller.OrderTestController#get , parameter:[{id:1,orderId:svsvsdvsvwev,userId:1234}]. [INFO ] 2023-11-14 23:41:36 c.example.demo.config.RequestLogAop 46: class method: com.example.demo.controller.OrderTestController#get , takes time: 161ms. 方法名称示例com.example.demo.controller.OrderTestController#get
如果想根据代码搜索日志那么可以选中方法后根据idea的快捷键 ctrlaltshiftc复制方法然后搜索日志。
如果想根据日志搜索代码那么复制日志打印出来的类和方法然后可以用idea的快捷键 双shift 快速搜索方法.