日志记录功能

需求描述:

        1,可记录页面操作模块、按钮的日志记录

        2,记录详细的指定操作数据日志

        3,记录的数据可能需要查询表

        4,需要考虑到扩展性及个性化定制

表结构设计:

CREATE TABLE YES_DEV.T_COMM_OPERATION_LOG (ID BINARY_BIGINT NOT NULL,OPERATOR VARCHAR(128),OPERATION_MODULE VARCHAR(64),OPERATION_OBJECT VARCHAR(128),OPERATION_TYPE VARCHAR(32),OPERATION_CONTENT CLOB,OPERATION_RESULT VARCHAR(8),OPERATION_IP VARCHAR(32),OPERATION_TIME TIMESTAMP,STATUS CHAR,CDATETIME TIMESTAMP,UDATETIME TIMESTAMP,CONSTRAINT T_COMM_OPERATION_LOG_PK PRIMARY KEY (ID)
);

自定义 controller/service层方法注解


import com.taia.yms.auditlog.aop.inter.OperationLogRuleInterface;
import com.taia.yms.auditlog.aop.service.DefaultOperationLogRule;
import java.lang.annotation.*;/*** 操作日志自定义注解* controller-> mapper1,mapper2.....*/@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface OperationLog {/*** controller层* @return 操作的页面名称*/String pageName() default "";/*** 主要是 mapper 执行的类型* 如果有值,则直接取注解上的值;如果没有,则按照自定义规则得到该值* @return*/String type() default "";/*** 执行的规则实现类的方法* @return*/String method() default "parse";/*** 规则实现类* @return*/Class<? extends OperationLogRuleInterface> operation() default DefaultOperationLogRule.class;}
import org.springframework.stereotype.Component;
import java.util.Map;/*** 规则接口*/
@Component
public interface OperationLogRuleInterface {void parse(Map<Integer,Object> map);}

import cn.hutool.json.JSONUtil;
import com.taia.yms.auditlog.aop.inter.OperationLogRuleInterface;
import com.taia.yms.auditlog.aop.model.OperationLogModel;
import com.taia.yms.auditlog.entity.OperationLog;
import com.taia.yms.config.ThreadLocalConf;
import lombok.extern.slf4j.Slf4j;
import java.util.Map;@Slf4j
public class DefaultOperationLogRule implements OperationLogRuleInterface {@Overridepublic void parse(Map<Integer,Object> map) {log.info("parse map:{}",map);//controller后置处理 默认将所有的contentMap转化为JSON串输出,如果需要自定义,重新定义规则类OperationLogModel operationLogModel = (OperationLogModel)ThreadLocalConf.getValue(OperationLogModel.class.getName());OperationLog operationLog = operationLogModel.getOperationLog();Map<String, Object> contentMap = operationLogModel.getOperationContentMap();operationLog.setOperationContent(JSONUtil.toJsonStr(contentMap));}
}

核心对象设计


import com.taia.yms.auditlog.entity.OperationLog;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;@Data
@Slf4j
public class OperationLogModel {private OperationLog operationLog;/*** 记录对应的mapper实例*/private Map<String,Object> beanMapperMap = new HashMap<>(5);/*** 存储所有 mapper层的字段数据*/private Map<String,Object> operationContentMap = new HashMap<>(10);/*** 新增 Operation* @return*/public OperationLog getOperationLog(){if(operationLog == null){operationLog = new OperationLog();}return operationLog;}}

实体对象OperationLog


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;import java.sql.Timestamp;
import java.util.List;@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class OperationLog {private String operationContent;private Timestamp operationTime;private String operator;private String operationModule = "DataGovernanceServer";private String operationObject;private String operationType;private String operationResult = "1";private String operationIp;// 前后比较的对象,默认是比较一层,多层需要重写private Object oldObject;private Object newObject;private Object insertJson;private List<List<LogCo

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

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

相关文章

35、正则表达式

一、正则表达式命令 正则表达式&#xff1a;匹配的是文本内容&#xff0c;linux的文本三剑客都是针对文本内容。 ​ grep 过滤文本内容 ​ sed 针对文本内容进行增删改查 ​ awk 按行取列 文本三剑客----都是按照行进行匹配。 1.1、grep筛选&#xff1a; grep的作用就是…

私有化地图离线部署方案之查询定位服务

私有化地图离线部署整体解决方案&#xff0c;除硬件之外&#xff0c;一般主要由基础地图服务、查询定位服务、路径规划服务和高程检索服务构成。 其中&#xff0c;查询定位服务是指地理编码与逆地理编码服务。 在《私有化地图离线部署方案之基础地图服务》一文中&#xff0c;…

软考 系统架构设计师系列知识点之杂项集萃(48)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;47&#xff09; 第75题 假设系统中互斥资源R的可用数位25。T0时刻进程P1、P2、P3、P4对资源R的最大需求数、已分配资源数和尚需资源数的情况如表a所示&#xff0c;若P1和P3分别申请资源R数为1和2…

不懂电路搭建可以学嵌入式编程开发吗?

当然可以学嵌入式编程开发&#xff01;虽然电路搭建是嵌入式开发中的一部分&#xff0c;但即使你对电路搭建不太了解&#xff0c;也可以从嵌入式编程开发入手。刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0…

Vue3 子组件监听父组件传来异步数据的正确方式

最初想使用watch 配合着 computed 来监听父组件数据&#xff0c;发现没有必要反而造成代码冗余&#xff0c;如果参数一多很难维护。 正确方式&#xff1a;直接使用computed监听就好 // 子组件 <script> export default {props: {yesterDayfollow: {type: Array},transpo…

公司自己的Qt打包步骤:

公司自己的打包步骤&#xff1a; 1. 把编译完的NRECS复制到 NRECS文件下下 2. NRECS文件夹下 运行 linuxdeployqt NRECS -appimage 3. 第2步如果出现问题&#xff0c;运行下面三行 export LIB_PATH/opt/Qt5.15/5.15.2/gcc_64/lib:$LIB_PATH export PLUGIN_PATH/opt/Qt5.15/5…

【Kafka 面试题】分布式通讯之Kafka面试题汇总(基础+进阶+高阶)-01

【Kafka 面试题】分布式通讯之Kafka面试题汇总 1. Kafka 的用途有哪些&#xff1f;使用场景如何&#xff1f;1.1 用途1.2 使用场景 2. Kafka 中的 ISR、AR 又代表什么&#xff1f;ISR 的伸缩又指什么&#xff1f;2.1 ISR (In-Sync Replicas)2.2 AR (Assigned Replicas)2.3 ISR的…

湘潭大学信息与网络安全考试总结

文章目录 题型内容&#xff08;试题回忆版&#xff09;填空单选多选简答大题 我的感受 题型 填空 20分&#xff0c;一空一分 单选 有几个&#xff0c;两分一个 多选 也有几个&#xff0c;两分一个&#xff0c;不确定的题建议当单选做 简答题 6 分一个&#xff0c;有几个 大题 …

Java中线程池的创建方式有几种?

在Java中&#xff0c;线程池是一种用于管理多个线程的机制&#xff0c;旨在提高性能并简化多线程编程。Java提供了多种方式来创建和管理线程池&#xff0c;主要通过java.util.concurrent包中的ExecutorService接口和Executors类来实现。以下是几种常见的线程池创建方式&#xf…

宝塔面板部署前端项目

部署前端项目 1 打包自己的项目2 登录宝塔面板3 添加站点4 设置域名5 进入当前站点对应的文件目录中6 上传打包后的文件7 访问网站 1 打包自己的项目 2 登录宝塔面板 点击左侧“网站”菜单进入对应页面 点击“添加站点” 3 添加站点 填写域名&#xff0c;如果没有域名的&am…

集成openfeign

集成feign有两种方式. 1.集成到所需项目中(只有该项目可以用)直接引用所需调用的项目 2.集成到公共项目(通用) 1.集成到所需项目中(只有该项目可以用) 再需要消费的服务 进行依赖的引用 1.引入依赖,openfeign,和所需调用的服务 <!--feign--><dependency><gro…

超详细!ArcGIS常用功能快捷键汇总,提高你的工作效率

以下列出了一些在 ArcMap 中可用的键盘快捷键&#xff0c;其中许多也可以应用在 ArcGlobe 和 ArcScene 中。另外&#xff0c;在 ArcMap 中编辑和处理表时&#xff0c;还存在一些可用的键盘快捷键。 您也可以为某个命令指定自己的快捷键。 在 ArcMap 中执行操作时&#xff0c;…

代码随想录算法训练营day65 | 99. 岛屿数量 深搜、99. 岛屿数量 广搜、100. 岛屿的最大面积

本次题目都是卡码网上的 99. 岛屿数量 深搜 dirs [(1, 0), (0, 1), (-1, 0), (0, -1)]def dfs(grid, visited, x, y):for i in range(4):nextx x dirs[i][0]nexty y dirs[i][1]# 越界了&#xff0c;直接跳过if nextx < 0 or nextx > len(grid) or nexty < 0 or…

FCM(Framework Compatibility Matrix)

FCM&#xff08;Framework Compatibility Matrix&#xff09;是Android Open Source Project&#xff08;AOSP&#xff09;中的一个关键组件&#xff0c;用于定义和描述Android框架与设备之间的兼容性关系。以下是关于FCM的详细回答&#xff1a; 定义和目的&#xff1a; FCM是…

【研究】AI大模型需要什么样的硬件?

关注AI大模型 x 硬件的两条思路 从22年11月OpenAI推出ChatGPT至今&#xff0c;我们看到Chatbot应用的能力不断增强&#xff0c;从最初的文字问答&#xff0c;迅速向具有自主记忆、推理、规划和执行的全自动能力的AI Agent发展。我们认为端侧智能是大模型发展的重要分支。建议投…

Open WebUI升级到最新版本

背景介绍 open-webui是一个用于构建Web用户界面的开源库&#xff0c;它仿照 ChatGPT 的图形化界面&#xff0c;可以非常方便的调试、调用本地大语言模型。 目前该开源库更新较为活跃&#xff0c;从3个月前的版本&#xff08;v0.1.108&#xff09;到截止到2024年6月中旬发布的…

牛皮!手写一个 RPC 框架

设计一个RPC&#xff08;远程过程调用&#xff09;框架是一个复杂的过程&#xff0c;涉及到网络通信、序列化与反序列化、服务发现、负载均衡、容错机制等多个方面。以下是设计RPC框架的一些基本步骤&#xff1a; 1. 需求分析&#xff1a; 确定RPC框架需要支持的特性&#xf…

软件测试:实验二 白盒测试技术

一、实验目的 掌握静态白盒测试的技术和原理。掌握逻辑覆盖测试的方法和原理。掌握基本路径测试的方法和原理。 二、实验要求 掌握静态白盒测试的技术和原理。按照实验题目要求&#xff0c;完成指定程序的白盒测试。 三、实验内容与步骤 1、逻辑覆盖测试。请编写测试用例指…

2024年春季学期《算法分析与设计》考前热身练习(历年真题)[纯C语言+思路]

A: 递归求解 题目描述 请使用递归编写一个程序求如下表达式的计算结果&#xff1a; S(1) 1/2 S(2) 1/2 1/6 S(3) 1/2 1/6 1/12 S(4) 1/2 1/6 1/12 1/20 ...... S(n) 1/2 1/6 1/12 1/20 1/30 ...... 输入n (1<n<1000)&#xff0c;输出表达式S(n)的值&…

Oracle CPU使用率过高问题处理

1.下载Process Explorer 2.打开Process Explorer&#xff0c;查看CPU使用情况最高的进程 3.双击该进程&#xff0c;查看详情 \ 4. 获取cpu使用最好的线程tid 5. 查询sql_id select sql_id from v$session where paddr in( select addr from v$process where spid in(1…