当前位置: 首页 > news >正文

使用AOP实现打印日志

首先创建annotation.SystemLog类:

package com.gjh.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD) //加在什么东西上
@Retention(RetentionPolicy.RUNTIME) //什么时候
public @interface SystemLog {String BusinessName(); //会以注解方式用在接口上
}

然后创建aspect.LogAspect:

package com.gjh.aspect;import com.alibaba.fastjson.JSON;
import com.gjh.annotation.SystemLog;
import lombok.extern.slf4j.Slf4j;
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.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;@Component
@Aspect
@Slf4j
public class LogAspect {@Pointcut("@annotation(com.gjh.annotation.SystemLog)")public void pt(){}@Around("pt()")public Object printLog(ProceedingJoinPoint joinPoint) throws Throwable {Object ret;try {handleBefore(joinPoint);ret = joinPoint.proceed();handleAfter(ret);} finally {// 结束后换行log.info("=======End=======" + System.lineSeparator());}return ret;}//切入点之前运行private void handleBefore(ProceedingJoinPoint joinPoint) {ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();HttpServletRequest request = requestAttributes.getRequest();//获取被增强的方法上的注解对象SystemLog systemLog = getSystemLog(joinPoint);log.info("=======Start=======");// 打印请求 URLlog.info("URL            : {}",request.getRequestURL());// 打印描述信息log.info("BusinessName   : {}", systemLog.BusinessName());// 打印 Http methodlog.info("HTTP Method    : {}",request.getMethod());// 打印调用 controller 的全路径以及执行方法log.info("Class Method   : {}.{}",joinPoint.getSignature().getDeclaringTypeName(),((MethodSignature)joinPoint.getSignature()).getName());// 打印请求的 IPlog.info("IP             : {}",request.getRemoteHost());// 打印请求入参log.info("Request Args   : {}", JSON.toJSONString(joinPoint.getArgs()));}private SystemLog getSystemLog(ProceedingJoinPoint joinPoint) {MethodSignature methodSignature =(MethodSignature) joinPoint.getSignature();SystemLog systemLog = methodSignature.getMethod().getAnnotation(SystemLog.class);return systemLog;}//切入点之后运行private void handleAfter(Object ret) {// 打印出参log.info("Response       : {}", JSON.toJSONString(ret));}
}

最后,在需要的接口上使用注解:

 @SystemLog(BusinessName = "更新用户信息")

 

例如我用在了:

@PutMapping("/userInfo")@Operation(tags = "修改个人信息")@SystemLog(BusinessName = "更新用户信息") //AOPpublic ResponseResult updateUserInfo(@RequestBody UserInfoDTO userInfoDTO){return ResponseResult.okResult(userservice.UpdateUserInfo(userInfoDTO));}

 

重启测试:

当我们进行修改个人信息之后:

e88c72a020b741608bd2bf75a843b3b0.png

 

相关文章:

使用AOP实现打印日志

首先创建annotation.SystemLog类: package com.gjh.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Target(ElementType.METHOD…...

2024年新算法-冠豪猪优化算法(CPO),CPO-RF-Adaboost,CPO优化随机森林RF-Adaboost回归预测-附代码

冠豪猪优化算法(CPO)是一种基于自然界中猪群觅食行为启发的优化算法。该算法模拟了猪群在寻找食物时的集群行为,通过一系列的迭代过程来优化目标函数,以寻找最优解。在这个算法中,猪被分为几个群体,每个群体…...

浅谈高阶智能驾驶-NOA领航辅助的技术与发展

浅谈高阶智能驾驶-NOA领航辅助的技术与发展 附赠自动驾驶学习资料和量产经验:链接 2019年在国内首次试驾特斯拉NOA领航辅助驾驶的时候,当时兴奋的觉得未来已来;2020年在试驾蔚来NOP领航辅助驾驶的时候,顿时不敢小看国内新势力了;现在如果哪家…...

大模型 智能体 智能玩具 智能音箱 构建教程 wukong-robot

视频演示 10:27 一、背景 继上文《ChatGPT+小爱音响能擦出什么火花?》可以看出大伙对AI+硬件的结合十分感兴趣,但上文是针对市场智能音响的AI植入,底层是通过轮询拦截,算是hack兼容,虽然官方有提供开发者接口,也免不了有许多局限性(比如得通过特定指令唤醒),不利于我…...

Clickhouse-表引擎探索之MergeTree

引言 前文曾说过,Clickhouse是一个强大的数据库Clickhouse-一个潜力无限的大数据分析数据库系统 其中一个强大的点就在于支持各类表引擎以用于不同的业务场景。 MergeTree MergeTree系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一…...

网络电视盒子哪个好?小编分享电视盒子品牌排行榜

电视盒子使用频率高,功能丰富,价格划算,是我们日常不可或缺的部分,小编经常会被问到与电视盒子相关的问题,考虑到很多朋友并不了解网络电视盒子哪个好,这次我来分享业内权威电视盒子品牌排行榜,…...

开源模型应用落地-baichuan2模型小试-入门篇(三)

一、前言 相信您已经学会了如何在Windows环境下以最低成本、无需GPU的情况下运行baichuan2大模型。现在,让我们进一步探索如何在Linux环境下,并且拥有GPU的情况下运行baichuan2大模型,以提升性能和效率。 二、术语 2.1. CentOS CentOS是一种基于Linux的自由开源操作…...

景联文科技高质量大模型训练数据汇总!

3月25日,2024年中国发展高层论坛年会上,国家数据局局长刘烈宏在“释放数据要素价值,助力可持续发展”的演讲中表示,中国10亿参数规模以上的大模型数量已超100个。 当前,国内AI大模型发展仍面临诸多困境。其中&#xff…...

【python】正则表达式

文章目录 正则表达式对象re.RegexObjectre.MatchObject符号说明匹配基础匹配?=、?<=、?!、?<!字符类re模块编译正则表达式compile 函数匹配字符串re.matchre.searchre.findall...

学习vue3第十二节(组件的使用与类型)

1、组件的作用用途 目的&#xff1a; 提高代码的复用度&#xff0c;和便于维护&#xff0c;通过封装将复杂的功能代码拆分为更小的模块&#xff0c;方便管理&#xff0c; 当我们需要实现相同的功能时&#xff0c;我们只需要复用已经封装好的组件&#xff0c;而不需要重新编写相…...

flume配置文件后不能跟注释!!

先总结&#xff1a;Flume配置文件后面&#xff0c;不能跟注释&#xff0c;可以单起一行写注释 报错代码&#xff1a; [ERROR - org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:158)] Unable to deliver event. Exception follows. org.apache.flume.EventDel…...

【docker】Dockerfile自定义镜像

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;中间件 ⛺️稳中求进&#xff0c;晒太阳 1.Dockerfile自定义镜像 常见的镜像在DockerHub就能找到&#xff0c;但是我们自己写的项目就必须自己构建镜像了。 而要自定义镜像&#xff0c;就…...

webpack项目打包console git分支、打包时间等信息 exec

相关链接 MDN toLocaleString child_process Node.js strftime 格式 代码 buildinfo.js const { execSync, exec } require("child_process"); // exec: 在 Windows 执行 bat 和 cmd 脚本// execSync 同步 // exec 异步// exec 使用方法 // exec(git show -s,…...

Linux centos7离线搭建FTP

1、下载、安装ftp 下载ftp安装包&#xff0c;可以从rpm下载站搜索合适的版本&#xff0c;使用wget命令下载。 wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/vsftpd-3.0.2-28.el7.x86_64.rpm 安装&#xff1a; rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm 2…...

关于GPT-SoVITS语音合成的效果展示(西游之西天送葬团)

目录 使用效果总结合成效果展示 使用效果总结 使用的是2024年03月21日22点28分更新的版本。 使用起来很方便&#xff0c;从它“自带界面”这点就能看出&#xff0c;易于使用也是目的之一&#xff0c;而且从训练到推理的每个步骤都能在界面中完成。 集成了多个实用工具&#…...

如何安装OceanBase的OBD

选择一&#xff1a;借助 all-in-one 安装包安装 OBD&#xff08;推荐&#xff09; OceanBase 社区版的all-in-one安装包是一个集成了多种工具的一键式安装包。它包含了数据库软件本身&#xff0c;以及OBD、OBProxy、OBClient&#xff0c;自4.1版本起&#xff0c;还额外加入了O…...

Unity 读写Excel打包后无法运行可能的解决方案

读写Excel打包后无法运行可能的解决方案 &#x1f4a1;.适用于NPOI、EPPlus。 &#x1f4a1;.下载 资源包&#x1f448;,解压后把dll放到Assets目录中再重新打包即可。...

算法沉淀 —— 深度搜索(dfs)

算法沉淀 —— 深度搜索&#xff08;dfs&#xff09; 一、计算布尔二叉树的值二、求根节点到叶节点数字之和三、二叉树剪枝四、验证二叉搜索树五、二叉搜索树中第K小的元素 一、计算布尔二叉树的值 【题目链接】&#xff1a;2331. 计算布尔二叉树的值 【题目】&#xff1a; …...

#设计模式#3.1用做松鼠桂鱼来理解抽象工厂(对象创建型模式)

概念&#xff1a;xx工厂&#xff0c;xx产品 区分 工厂是动作&#xff0c;产品是结果&#xff08;菜品&#xff09; 概念&#xff1a;抽象xx&#xff0c;具体xx 区分 抽象产品&#xff1a;“中式菜品” 具体产品&#xff1a;“麻婆豆腐”、“宫保鸡丁” 抽象工厂&#xff1a;“…...

adb基本命令

下载安装 adb 概述: ADB 全称为 Android Debug Bridge&#xff0c;起到调试桥的作用&#xff0c;是一个客户端-服务器端程序。其中客户端是用来操作的电脑&#xff0c;服务端是 Android 设备。 下载地址: Windows版本&#xff1a;https://dl.google.com/android/repository/pl…...

华为HarmonyOS用户必看:5分钟搞定MicroG完整安装与权限配置指南

华为HarmonyOS用户必看&#xff1a;5分钟搞定MicroG完整安装与权限配置指南 【免费下载链接】GmsCore Free implementation of Play Services 项目地址: https://gitcode.com/GitHub_Trending/gm/GmsCore 还在为华为HarmonyOS设备无法使用Google服务而烦恼吗&#xff1f…...

基于Arduino与IRLib2的万能遥控器DIY:从红外解码到蓝牙HID的嵌入式实践

1. 项目概述与核心价值如果你和我一样&#xff0c;家里电视、机顶盒、音响、空调的遥控器堆满了茶几&#xff0c;每次想用都得翻找半天&#xff0c;或者你正在为一位行动不便的亲友寻找一种更便捷的控制家电的方式&#xff0c;那么这个基于Arduino和IRLib2的万能遥控器DIY项目&…...

从AwesomeCursorPrompt看提示工程:构建高效AI编程协作工作流

1. 项目概述&#xff1a;从“AwesomeCursorPrompt”看提示工程的演进最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“AwesomeCursorPrompt”。光看名字&#xff0c;可能很多朋友会有点懵——“Cursor”是那个AI代码编辑器&#xff0c;“Prompt”是提示词&#xff0c;那这…...

Python 的串口操作库 pyserial

封装了串口通讯模块&#xff0c;支持Linux、Windows、BSD&#xff08;可能支持所有支持POSIX的操作系统&#xff09;&#xff0c;支持 Jython (Java) 和 IconPython (.NET and Mono)。 首页 http://pyserial.sf.net/ 1. 特性 所有平台使用同样的类接口端口号默认从0开始&…...

Airtable MCP服务器:AI与数据协作的自动化新范式

1. 项目概述&#xff1a;当Airtable遇上MCP&#xff0c;数据协作的自动化新范式 如果你和我一样&#xff0c;日常工作中重度依赖Airtable来管理项目、追踪任务、甚至搭建轻量级的业务系统&#xff0c;那你一定也遇到过这样的痛点&#xff1a;数据是活的&#xff0c;但流程是死…...

vue基于springboot框架的全国非物质文化遗产展示平台

目录同行可拿货,招校园代理 ,本人源头供货商项目概述技术架构核心功能特色设计部署与扩展项目技术支持源码获取详细视频演示 &#xff1a;同行可合作点击我获取源码->->进我个人主页-->获取博主联系方式同行可拿货,招校园代理 ,本人源头供货商 项目概述 全国非物质文…...

基于Arduino与步进电机的DIY无线电动相机滑轨制作全攻略

1. 项目概述&#xff1a;打造你的第一台无线电动相机滑轨如果你玩摄影或者视频创作&#xff0c;肯定对那种平滑、富有电影感的平移镜头&#xff08;Dolly Shot&#xff09;着迷过。专业级的电动滑轨动辄大几千甚至上万&#xff0c;让很多个人创作者望而却步。今天&#xff0c;我…...

c++ 动态链接器audit c++如何使用ld_audit监控so加载过程

Oracle监听端口被占用导致TNS-12541错误&#xff0c;需检查并更换端口&#xff08;如1522&#xff09;&#xff0c;同步更新listener.ora、tnsnames.ora及JDBC连接串&#xff0c;重启监听&#xff1b;EM Express需单独配置HTTP端口&#xff1b;Windows下还需手动开放防火墙新端…...

MySQL实现跨库在线迁移的方法_利用Binlog实时数据同步工具

MySQL跨库迁移不能只靠mysqldump&#xff0c;因其逻辑全量导出会锁表或阻塞写入&#xff0c;且无位点信息无法增量追平&#xff1b;必须结合binlog实时拉取回放实现秒级停机。MySQL跨库迁移为什么不能只靠mysqldump因为mysqldump是逻辑全量导出&#xff0c;锁表或至少阻塞写入&…...

别再被VS2019的CMake报错劝退!从‘RC命令失败’看Windows C++开发环境那些坑

破解Windows C开发环境迷局&#xff1a;从CMake报错到系统级解决方案 当你在Visual Studio 2019中满怀期待地点击"生成解决方案"&#xff0c;却看到控制台突然弹出"RC命令失败"的红色错误时&#xff0c;那种挫败感每个C开发者都深有体会。这不仅仅是一个简…...