AOP日志管理
程序员文章站
2022-03-02 15:40:37
...
日志管理
1.导入坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>
2.编写实体类
public class sysLog {
private String id;
private Date visitTime;
private String visitTimeStr;
private String username;
private String ip;
private String url;
private Long executionTime;
private String method;
}
3.编写切面类
@Component
@Aspect
public class sysAop {
private Date visitTime;
private Class executionClass;// 访问的类
private Method executionMethod; // 访问的方法
@Autowired
private HttpServletRequest request;
@Autowired
private sysService service;
@Before("execution(* com.li.controller.*.*(..))")
public void preMethod(JoinPoint jp) throws Exception{
visitTime=new Date();
executionClass = jp.getTarget().getClass();
String methodName = jp.getSignature().getName();
Object[] args = jp.getArgs();
if(args==null || args.length==0){
executionMethod=executionClass.getMethod(methodName);
}else{
ArrayList<Class> classes = new ArrayList<>();
for (Object arg : args) {
classes.add(arg.getClass());
}
Class[] argsClass = classes.toArray(new Class[classes.size()]);
executionMethod=executionClass.getMethod(methodName,argsClass );
}
}
@After("execution(* com.li.controller.*.*(..))")
public void postMethod(){
sysLog sysLog = new sysLog();
Date postTime = new Date();
Long executionTime= postTime.getTime() - (visitTime).getTime();
if(executionClass!=null&&executionMethod!=null&&executionClass!=sysAop.class){
// url获取
String url="";
RequestMapping classMapping = (RequestMapping) executionClass.getAnnotation(RequestMapping.class);
RequestMapping methodMapping = executionMethod.getAnnotation(RequestMapping.class);
if(classMapping!=null){
String classUrl = classMapping.value()[0];
String methodUrl=null;
if(methodMapping!=null){
methodUrl = methodMapping.value()[0];
}
url=classUrl+methodUrl;
}
// ip获取
String ip= request.getRemoteAddr();
// 用户名获取
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String userName = user.getUsername();
// 封装
sysLog.setExecutionTime(executionTime);
sysLog.setIp(ip);
sysLog.setUrl(url);
sysLog.setUsername(userName);
sysLog.setVisitTime(visitTime);
sysLog.setVisitTimeStr(visitTime.toString());
sysLog.setMethod("[类名]" + executionClass.getName() + "[方法名]" + executionMethod.getName());
}
// 保存
service.save(sysLog);
}
}
上一篇: AOP实现日志管理