Aop自定义注解生成日志

Aop自定义注解生成日志

1.编写自定义注解

//表示此注解可以标注在方法上
@Target(ElementType.METHOD)
//运行时生效
@Retention(RetentionPolicy.RUNTIME)
public @interface OpetionLog {
	//定义一个变量,可以接收参数
    String  value() default "";

}

2.Controller

    @PostMapping("updatestate/{id}")
    @ApiOperation("更改科室启用状态")
    @OpetionLog("更改科室启用状态")
    public Result updateStatus(@PathVariable Integer id) throws UnknownHostException {
        log.info("修改科室启用状态");
        return departmentService.updateStatus(id);
    }

3.切面类(控制台日志)

@Component
@Aspect
public class ParamaterLogAop {

    private static Logger log =           Logger.getLogger(String.valueOf(ParamaterLogAop.class));
    private long start = 0;
    @Pointcut("execution(* com.aaa.controller.*.*(..))")

	//切面签名
    public  void  haha(){}

    @Before("haha()")
    public  void  before(JoinPoint point){

        ServletRequestAttributes requestAttributes = (ServletRequestAttributes)           RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = requestAttributes.getRequest();
        HttpServletResponse response = requestAttributes.getResponse();

        String addr = request.getRemoteAddr();
        String uri = request.getRequestURI();
        Object[] args = point.getArgs();

        start = System.currentTimeMillis();
        log.info("===================请求的地址是:================="+addr);
        log.info("===================请求的路径是:================="+uri);
        log.info("===================请求的参数是:================="+ Arrays.toString(args));
    }

    @AfterReturning("haha()")
    public  void  after(){
        long end = System.currentTimeMillis();
        log.info("=================耗时================="+ (end-start));
        log.info("=================结束了=================");
    }
}

4.切面类(数据库日志表)

@Component
@Aspect
public class OptionsLogAop {
    @Resource
    private HttpSession httpSession;
    @Resource
    private LogsMapper logsMapper;

    @AfterReturning(pointcut = "@annotation(opetionLog)", returning = "result")
    public void insertLog(JoinPoint joinPoint, OpetionLog opetionLog, Result result) throws UnknownHostException {
        //获取日志信息
        
        //获取当前时间
        String logTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        //获取当前操作人ip地址
        String addr = InetAddress.getLocalHost().getHostAddress();
        //获取登录人员姓名
        String name = ((DoctorDTO)httpSession.getAttribute("doctor")).getName();
        //操作类型
        String operation = opetionLog.value();
        //操作数据
        Object[] args = joinPoint.getArgs();
        //操作结果
        String code = result.getCode().toString();
        //日志对象
        LogsDTO logsDTO = new LogsDTO(null, name, operation, logTime, addr, Arrays.toString(args), code);
        //插入数据库
        logsMapper.insertLogs(logsDTO);
    }
}

4.1LogsDTO

@Data
@AllArgsConstructor
@NoArgsConstructor
public class LogsDTO implements Serializable {
    private static final long serialVersionUID = -28616532886171515L;
    
    private Integer id;
    
    private String name;
    
    private String operation;
    
    private String time;
    
    private String addr;
    
    private String data;
    
    private String result;
}

4.2LogsMapper

int insertLogs(LogsDTO logsDTO);


//Logsmapper.xml
<insert id="insertLogs">
        insert into logs
        values (null, #{name}, #{operation},#{time},
                #{addr},#{data},#{result})
</insert>

5.结果

5.1控制台

在这里插入图片描述

5.2数据库日志表

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【移远QuecPython】EC800M物联网开发板的内置GNSS定位的恶性BUG(目前没有完全的解决方案)

【移远QuecPython】EC800M物联网开发板的内置GNSS定位的恶性BUG&#xff08;目前没有完全的解决方案&#xff09; GNSS配置如下&#xff1a; 【移远QuecPython】EC800M物联网开发板的内置GNSS定位获取&#xff08;北斗、GPS和GNSS&#xff09; 测试视频&#xff08;包括BUG复…

智慧建筑工地管理平台源码

智慧工地是聚焦工程施工现场&#xff0c;紧紧围绕人、机、料、法、环等关键要素&#xff0c;综合运用物联网、云计算、大数据、移动计算和智能设备等软硬件信息技术&#xff0c;与施工生产过程相融合。 智慧工地管理平台充分运用数字化技术&#xff0c;聚焦施工现场岗位一线&am…

乌班图 Linux 系统 Ubuntu 23.10.1 发布更新镜像

Ubuntu 团队在其官网上发布了Ubuntu 23.10.1 版本,这是目前较新的 Ubuntu 23.10(Focal Fossa)操作系统系列的第一个发行版,旨在为社区提供最新的安装媒体。Ubuntu 22.04 LTS(Focal Fossa)操作系统系列于 2022 年 4 月 21 日发布。 Ubuntu 23.10 LTS(长期支持版本)可用…

数字人IP为何成家电品牌年轻化营销黑马?

伴随着数字人概念的出现&#xff0c;家电品牌逐渐通过3D虚拟数字人定制&#xff0c;让数字人成为内容、变现一体的IP&#xff0c;形成一定影响力的品牌效应&#xff0c;利用长线内容沉淀粉丝&#xff0c;使品牌实现年轻化营销。 *图片源于网络 如近日在海尔智家旗下品牌发布会上…

springboot--外部环境配置

外部环境配置 前言1、配置优先级配置文件优先级如下&#xff08;后面的覆盖前面的&#xff09;测试 2、外部配置3、导入配置4、属性占位符 前言 场景&#xff1a;线上应用如何快速修改配置&#xff0c;并引用最新配置&#xff1f; springBoot 使用配置优先级外部配置 简化配置…

重定向-缓冲区

1.重定向 文件描述符对应的分配规则是什么? 尝试用这个代码 关闭0,1&#xff0c;2文件描述符&#xff0c;看看有什么现象&#xff1f;关闭哪个&#xff0c;你打开的文件fd应该就是哪个 结论&#xff1a; 从0下标开始&#xff0c;寻找最小的没有没使用的数组位置&#xff0c;它…

基于php+thinkphp+vue的学生公寓管理系统-宿舍管理-寝室管理系统

运行环境 开发语言&#xff1a;PHP 数据库:MYSQL数据库 应用服务:apache服务器 使用框架:ThinkPHPvue 开发工具:VScode/Dreamweaver/PhpStorm等均可 项目简介 本系统结合计算机系统的结构、概念、模型、原理、方法&#xff0c;在计算机各种优势的情况下&#xff0c;采用PHP语…

自动曝光算法(第二讲)

序言 第一章说了&#xff0c;自动曝光算法的目的&#xff1a;已知当前raw图亮度、当前曝光时间、当前增益和目标亮度&#xff0c;当环境光发生变化的时候&#xff0c;是通过控制增益、曝光时间和光圈使raw图的亮度&#xff0c;保持在目标亮度附近。本章想讲一下目标亮度的相关…

美观且可以很方便自定义的MATLAB绘图颜色

函数介绍 主函数是draw_test&#xff0c;用于测试函数。 draw_h是函数&#xff0c;用于给Matlab提供美观且可以很方便自定义的绘图颜色。 draw_h函数介绍 这是一个带输入输出的函数&#xff0c;输入1/2/3&#xff0c;输出下面三种颜色库的配色&#xff0c;每种库均有五种颜色…

Find My手机保护壳|苹果Find My与手机保护壳结合,智能防丢,全球定位

随着科技水平的快速发展&#xff0c;科技美容这一行业做为新型产业新生而出。时尚IT品牌随着市场的多元化发展。针对手机品牌和功能的增加而呈多样化&#xff0c;将手机保护壳按质地分有PC壳&#xff0c;皮革 &#xff0c;硅胶&#xff0c;布料&#xff0c;硬塑&#xff0c;皮套…

手机上有哪些支持设置农历日期提醒的工具

很多人的生日都是按照农历日期来安排的&#xff0c;而农历日期和公历日期相错的日子很多&#xff0c;在手机上如果想要记录农历生日提醒&#xff0c;需要借助一些支持设定农历日期的工具来实现。 手机上有哪些支持设置农历日期提醒的工具呢&#xff1f;敬业签是一款可以在手机…

C++:类和对象(中)

1.类的6个默认成员函数&#xff1a; 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;用户没有显式实现&#xff…

全志H6-LicheePi调试记录

LPDDR3&#xff1a;K4E6E304ED-EGCG和K4E6E304ED-EGCF 最高速率不一样&#xff0c;CG是2133MHz&#xff0c;CF是1866MHz

VMware产品收集日志方法汇总

概述 vCenter日志是一个用于存储与vSphere环境相关的各种活动、事件和警告的日志系统。通过收集并分析vCenter日志&#xff0c;管理员可以获得有关其虚拟化环境的重要洞察和故障排除信息。 vCenter日志由多个组件组成&#xff0c;包括vCenter Server、ESXi主机和其他vSphere组…

Apache ECharts简介和相关操作

文章目录 一、Apache ECharts介绍二、快速入门1.下载echarts.js文件2.新建index.html文件3.准备一个DOM容器用于显示图表4.完整代码展示5.相关配置 三、演示效果四、总结 一、Apache ECharts介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观…

C#文件操作从入门到精通(3)——Txt文件读写操作

前言: 我们在开发c#程序时,经常需要对txt文本文件进行操作,有时候是读取txt文本中的内容,有时候是将程序运行过程中的一些数据写入到txt文本中做记录,为了帮助大家学习txt文本的操作,我特意开发了一个“txt文件操作学习”winform小软件,该软件调用了我封装的txt文件操作…

项目管理之如何估算项目工作时间

在项目管理中&#xff0c;项目工作时间的估算是一个关键环节&#xff0c;它直接影响到项目的进度、预算和资源分配。本文将介绍几种常用的时间估算技术和时间估算的十步法&#xff0c;帮助你更好地估算项目工作时间。 常用时间估算技术 类比估算 参照以往同类同规模项目时间数…

Vue3 如何在<script setup>里设置组件name属性

Vue3 如何在<script setup>里设置组件name属性 文章目录 Vue3 如何在\<script setup>里设置组件name属性一、Vue组件中 name 的用处二、难看但实用的方法三、使用第三方插件支持安装插件插件基本配置插件基本使用 四、Vue官方解决方法4.1 Vue3.3版本之前安装插件插…

高防IP的原理

高防IP&#xff0c;把域名解析到高防IP上(web事务只要把域名指向高防IP 即可。非web事务&#xff0c;把事务IP换成高防IP即可)一起在高防IP上设置转发规矩;所有公网流量都会走高防IP&#xff0c;通过端口协议转发的方法将用户的拜访通过高防IP转发到源站IP&#xff0c;一起将歹…

IDEA集成Docker插件打包服务镜像与运行【附Docker命令汇总】

Docker官网 Docker官网&#xff1a;https://www.docker.com/ Docker Hub官网&#xff1a;http://hub.docker.com/ 什么是Docker Docker 是一个开源的容器引擎&#xff0c;可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者和系统管理员在笔记本上编…