洞察探索open banking如何通过小程序容器技术助力金融企业实现数据安全和数字化转型
1224
2022-10-14
SpringAOP实现日志收集管理功能(步骤详解)
第一步引入必要的依赖
第二步创建自定义日志注解类
package com.example.aop.log.annotion;
import java.lang.annotation.*;
/**
* @author zhr_java@163.com
* @date 2022/3/29 20:56
*/
@Inherited
@Target({ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
public @interface LogNotice {}
第三步切面设计,扫描上面的注解
package com.example.aop.log.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
* @author zhr_java@163.com
* @date 2022/3/29 20:59
*/
@Aspect
@Component
public class LogAspect {
@Pointcut("@annotation(com.example.aop.log.annotion.LogNotice)")
public void doLog() {}
@Around("doLog()")
public Object insertLog(ProceedingJoinPoint joinPoint) throws Throwable {
Object object = joinPoint.proceed();
try {
HashMap paramsMap;
Signature signature = joinPoint.getSignature();
Method method = ((MethodSignature) signature).getMethod();
String methodName = method.getName();
String className = method.getDeclaringClass().getName();
paramsMap = (HashMap) getParams(joinPoint, method);
// 打印日志,可以记录到数据库的日志表里面,等到有客户反馈的时候好去查询日志
System.out.println(
"methodName: " + methodName + "; className: " + className + "; paramsMap:" + paramsMap);
// 也可以记录请求当前接口耗费的时间
} catch (ExceioDJiption e) {
// 如果在日志记录的过程中出现问题,那么要处理一下异常,不要直接抛出,此处做成消息队列通知或者打印日志
}
// 此处要进行返回代理的对象,如果没有返回的话,前端是收不到数据的
return object;
}
private Map
// get parameter names
String[] parameterNames = new DefaultParameterNameDiscoverer().getParameterNames(method);
Object[] args = joinPoint.getArgs();
Map
if (parameterNames != null && parameterNames.length != 0) {
for (int i = 0; i < parameterNames.length; i++) {
params.put(parameterNames[i], args[i]);
}
return params;
}
第四步把自定义的注解放到你的接口上面
package com.example.demo.controller;
import com.example.aop.log.annotion.LogNotice;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.http://annotation.RestController;
/**
* @author zhr_java@163.com
* @date 2022/3/29 20:50
*/
@RestController
@RequestMapping("/person")
public class PersonController {
//在此处加上你自定义的注解(@LogNotice)
@LogNotice
@GetMapping("get_person")
public String getPerson(Integer numbers) {
return "123";
}
}
第五步测试
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~