Java之~ Aop自定义注解日志

news2024/12/29 10:40:11
大纲步骤:
一,创建需要记录的日志表,创建基础方法。(省略)
二,在需要加记录日志的方法上加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 {

    @Autowired
    private 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 + "()");

            //获取request
            Object[] request = joinPoint.getArgs();
            //请求的参数
            dto.setRequestBody(JSONObject.toJSONString(request));
            //响应的结果
            String res = JSONObject.toJSONString(result);
            dto.setResponseResult(res);
            dto.setCostTime(time);
               .......
            //添加日志
            httpLogApi.insert(dto);
        }
    }

演示:

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银行数字化转型导师坚鹏:商业银行零售业务数字化风控

商业银行零售业务数字化风控课程背景: 数字化背景下,很多银行存在以下问题: 不清楚商业银行数字化风控发展现状? 不清楚对公业务数字化风控工作如何开展? 不知道零售业务数字化风控工作如何开展? 课程特…

十三、RNN循环神经网络实战

因为我本人主要课题方向是处理图像的,RNN是基本的序列处理模型,主要应用于自然语言处理,故这里就简单的学习一下,了解为主 一、问题引入 已知以前的天气数据信息,进行预测当天(4-9)是否下雨 日期温度气压是否下雨4-…

拦截器 JWT SpringBoot 多环境开发 本地文件上传 阿里云OSS存储 异常处理

Springboot: 是:由pivotal团队提供的全新框架,其设计目的是用来简化spring应用的初始搭建以及开发过程 作用:简化Spring的环境搭建和代码开发 使用原理:就是boot提前写好了一些maven的工程和jar包,程序员在…

Android屏幕适配dp、px两套解决办法

最新最全文章(2018-08-25):Android dp方式的屏幕适配-原理(后期补充完整讲解)_手机dp输出是横屏还是竖屏_android阿杜的博客-CSDN博客 “又是屏幕适配,这类文章网上不是很多了吗?” 我也很遗憾,确实又是老问题。但本文重点对网上…

ChatGPT来势凶猛,公有云格局会不会大变?

【引言】: AI风暴来袭,全球无人幸免。 但公有云与ChatGPT到底啥关系? 1) 公有云与ChatGPT,到底谁会“吃”掉谁? 【科技明说 | 热点关注】在看到公有云厂商纷纷开始大模型发布,开始GPT的融入之…

虹科教您 | 基于Linux系统的虹科RELY-TSN-KIT套件操作指南(2)——操作演示

RELY-TSN-KIT是首款针对TSN的开箱即用的解决方案,它可以无缝实施确定性以太网网络,并从这些技术复杂性中抽象出用户设备和应用。该套件可评估基于IEEE 802.1AS同步的时间常识的重要性,并借助时间感知整形器来确定性地交付实时流量&#xff0c…

EJBCA搭建

EJBCA搭建 前言: 本次EJBCA搭建使用操作系统为centos 7,shell用户为root。 1.下载jdk环境: // 下载jdk yum install -y java-1.8.0-openjdk-devel // 查看java版本 java -version 本人jdk环境: openjdk version "1.8.…

计算机自动化有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是计算机自动化领域的一些知名SCI期刊: IEEE Transactions on Automation Science and Engineering: 该期刊由IEEE(电气和电子工程师协会)出版,涵盖了自动化科学和工程领域的研究,包括自动控制、人工…

算法记录 | Day35 贪心算法

860.柠檬水找零 思路: 只需要维护三种金额的数量,5,10和20。 有如下三种情况: 情况一:账单是5,直接收下。情况二:账单是10,消耗一个5,增加一个10情况三:账…

九、Locust运行与配置

1. 配置 1.1 环境变量 也可以通过环境变量设置选项。它们通常与命令行参数相同,但大写并带有前缀LOCUST_: 在 Linux/macOS 上: $ LOCUST_LOCUSTFILEcustom_locustfile.py locust在 Windows 上: > set LOCUST_LOCUSTFILEcu…

MySQL的安装与卸载(Centos7.9环境下,全篇图文手把手安装教程)

前言 在安装MySQL之前,我们先来看看MySQL如何卸载。如果从未安装过MySQL的任何版本,可以直接跳过这部分。 如果已经安装过MySQL,一定要确保自己的环境中的MySQL相关文件删除干净,否则重新安装时可能会出现一些错误 tips&#xf…

问界M9全剧透:华为的「科技豪华」样板间

作者 | 德新 编辑 | 王博 今天在nova 11的发布会上,曝了一个意外——问界M9提前剧透。实际上这车要今年四季度才上市。「本来没打算这么早发出来,前阵子网上有一个很老的设计图在传(实在太丑)。没办法,干脆先讲讲」…

DriveGPT、车企订单背后,为什么毫末每年都能搞出新东西?

作者 | 祥威 编辑 | 德新 4月11日,毫末智行正式发布自动驾驶生成式大模型 DriveGPT,中文名 雪湖海若,可以提升自动驾驶认知能力,最终提升规控效率。 雪湖海若的核心,是将各种驾驶场景作为Token输入到模型中&…

《Netty》从零开始学netty源码(三十九)之PoolSubPage的内存分配

目录 PoolSubPage.allocategetNextAvail方法toHandle方法removeFromPool方法 PoolSubPage.allocate 上一篇我们介绍了PoolSubPage的简单知识,当我们需要PoolSubPage的内存时可调用allocate方法查找可分配二进制的位置,具体的源码过程如下: …

ctfshow web入门命令执行web74-118

1.web74 还是先扫目录 payload: c$anew DirectoryIterator(glob:///*);foreach($a as $f){echo($f->__toString()." ");}exit(0); #扫描根目录有什么文件 c$anew DirectoryIterator(glob:///*);foreach($a as $f){echo($f->getFilename()." ");} …

N32G430学习笔记20--- spi外设单工模式下spi1中断发送和spi2中断数据接收

基本知识 spi主模式下使用硬件NSS(3个条件缺一不可): 设置硬件NSS模式设置NSS电平为低电平使能NSS输出spi主模式下使用软件NSS: 设置软件NSS模式 使能NSS输出 SPI_SS_Output_Enable(SPI1);//NSS 使能 SPI接线方式(MISO 和MOSI反着接) SPI1->SLCK=PB3 <–> SPI2-…

在SPRO为定制表创建节点

确定透明表已创建&#xff0c;允许维护&#xff0c;并且生成维护视图。保证SM30可以正常维护。 2.在已有的节点增加还是新增&#xff0c;如果在以有的节点增加&#xff0c;需要查看已有节点的Enhancement ID 。 查看方法具体请点击。 举个例子&#xff1a;我们想在Z-business C…

每日学术速递4.17

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.DreamPose: Fashion Image-to-Video Synthesis via Stable Diffusion 标题&#xff1a;DreamPose&#xff1a;通过稳定扩散实现时尚图像到视频合成 作者&#xff1a;Johanna Karr…

无聊写个 chatgpt 玩玩!这不得试一试 openai 的聊天和绘画功能

chatgpt 最近很火。使用 chatgpt 问一些问题还是很有用的。比如面试题&#xff0c;面试题的答案。简直不要太爽。 不过闲来无事&#xff0c;也使用 openai 提供的api &#xff0c;写了几个小页面&#xff0c;可以进行聊天&#xff0c;和绘画。 项目放在 github 上了&#xff…

cmake和cmake install学习

cmake 设置cmake的C/C编译标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_C_STANDARD 11)add_library生成的默认是静态库还是动态库 https://blog.csdn.net/HandsomeHong/article/details/122401900 add_library()命令生成的默认库类型取决于第二个参数。如果第二个参数是STATI…