Java之~ Aop自定义注解日志

news/2024/10/16 20:15:29/
大纲步骤:
一,创建需要记录的日志表,创建基础方法。(省略)
二,在需要加记录日志的方法上加Aop注解1,创建一个注解类,Aop中定义一个注解
import java.lang.annotation.*;
/*** http 请求第三方请求日志使用注解*/
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface HttpLog {//需要手动指定的枚举类HttpLogTypeEnum type();
}

2,切面处理

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.PropertyFilter;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
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.jeecg.common.constant.CommonConstant;
import org.jeecg.common.util.SpringContextUtils;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
import org.springframework.stereotype.Component;
import org.springframework.validation.BindingResult;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
/*** http第三方日志,切面处理类** @Author scott* @email jeecgos@163.com* @Date 2018年1月14日*/
@Aspect
@Component
@Slf4j
public class HttpLogAspect {@Autowiredprivate SysThirdHttpLogApi httpLogApi;@Pointcut("@annotation(org.jeecg.common.aspect.annotation.HttpLog)")public void httpLogPointCut() {}@Around("httpLogPointCut()")public Object around(ProceedingJoinPoint point) throws Throwable {long beginTime = System.currentTimeMillis();//执行方法 目标方法返回值Object result = point.proceed();//执行时长(毫秒)long time = System.currentTimeMillis() - beginTime;//保存http响应日志saveSysHttpLog(point, time,result);//        log.info(String.valueOf(result));return result;}//处理数据,入库保存日志private void saveSysHttpLog(ProceedingJoinPoint joinPoint, long time,Object result) {MethodSignature signature = (MethodSignature) joinPoint.getSignature();Method method = signature.getMethod();//获取注解类HttpLog httpLog = method.getAnnotation(HttpLog.class);if (httpLog != null) {HttpLogDto dto = new HttpLogDto();dto.setType(httpLog.type().name());//方法名//dto.setMethodType(httpLog.methodType().name());//dto.setMethodName(httpLog.methodType().getDesc());//请求的方法名String className = joinPoint.getTarget().getClass().getName();String methodName = signature.getName();dto.setMethod(className + "." + methodName + "()");//获取requestObject[] request = joinPoint.getArgs();//请求的参数dto.setRequestBody(JSONObject.toJSONString(request));//响应的结果String res = JSONObject.toJSONString(result);dto.setResponseResult(res);dto.setCostTime(time);.......//添加日志httpLogApi.insert(dto);}}

演示:

 

 

 


http://www.ppmy.cn/news/47270.html

相关文章

Spring IoC注解开发

Component 组件 Controller 控制器 Service 业务 Repository 仓库 这四个标签是为了创建对象 其实他们四个本质都一样,只不过另外三个是Component的别名,在不同层使用容易区分 首先需要加入aop依赖,如果你事先加入spring-context依赖…

JS数组去重的12种方法

一、利用ES6 Set去重(ES6中最常用) Set对象是ES6中新定义的数据结构,类似数组,它允许存储任何类型的唯一值,不管是原始值还是对象引用。 Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组 …

【计算机视觉·OpenCV】使用Haar+Cascade实现人脸检测

前言 人脸检测的目标是找出图像中所有的人脸对应的位置,算法的输出是人脸的外接矩形在图像中的坐标。使用 haar 特征和 cascade 检测器进行人脸检测是一种传统的方式,下面将给出利用 OpenCV 中的 haarcascade 进行人脸检测的代码。 程序流程 代码 impo…

JeecgBoot 3.5.1 版本发布,开源的企业级低代码平台

项目介绍 JeecgBoot是一款企业级的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue3,Mybatis-plus,Shiro,JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领…

Vector - CAPL - Panel面板_01

前面有过简单的介绍panel面板的功能,不过终究感觉有点简陋,最近也在搞PyQT5,发现如果对于这块了解不多的情况下,想要做一些东西的话,简直无从下手,因此专门翻阅了之前的文章,查看了下确实缺少了…

使用wait监听tomcat服务启动

文章的wait脚本素材会放在末尾 执行docker-compose.yml文件之后就有mysql的主服务器,还有从服务器,还有tomcat服务,在tomcat中部署一个crm项目,tomcat服务中我们添加了启动顺序, # 启动顺序 depends_on: - mysql…

XO08R2 1SBP260109R1001接地系统能够为dcs提供屏蔽层,消除电子噪声干扰

​ XO08R2 1SBP260109R1001接地系统能够为dcs提供屏蔽层,消除电子噪声干扰 dcs合理、可靠的系统接地,是dcs系统非常重要的内容。为了保证dcs系统的监测控制精度和安全、可靠运行,必须对系统接地方式、接地要求、信号屏蔽、接地线截面选择、接…

【C++】STL——vector 深度剖析 及 模拟实现

文章目录 前言1. vector的介绍及使用1.1 vector的介绍1.2 vector的使用1.2.1 构造函数1.2.2 vector对象的遍历1.2.3 vector的迭代器1.2.4 reserve和resize1.2.5 insert和erase1.2.6 vector< char > 能否替代string 2. vector的模拟实现2.1 STL_vector源码浏览2.2 vector的…