首页 > 其他分享 >操作日志记录方法实现

操作日志记录方法实现

时间:2024-07-17 11:11:53浏览次数:7  
标签:Log 记录 operLog 注解 操作 日志 public 请求

一、首先定义一个Log注解,需要标明 操作的 title、业务类型、功能、操作人类别、是否保留请求参数
@Target({ ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log{
/**
* 模块
*/
public String title() default "";

/**
 * 功能
 */
public BusinessType businessType() default BusinessType.OTHER;

/**
 * 操作人类别
 */
public OperatorType operatorType() default OperatorType.MANAGE;

/**
 * 是否保存请求的参数
 */
public boolean isSaveRequestData() default true;

}

二、定义LogAspect切面增强类,拦截所有使用@Log注解的方法
@Component
public class LogAspect {
// 切面
@Pointcut("@annotation(com.ruoyi.common.annotation.Log)")
public void logPointCut() { }

// 切点,方法结束后
@AfterReturning(pointcut = "logPointCut()", returning = "jsonResult")
public void doAfterReturning(JoinPoint joinPoint, Object jsonResult){
    一、获取 方法中的Log注解
        Signature signature = joinPoint.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        Method method = methodSignature.getMethod();
        Log controllerLog = method.getAnnotation(Log.class);
        没有注解的方法不记录日志
        if (controllerLog == null){
            return;
        }
  二、获取登录用户、请求URL链接、请求客户端IP、请求成功标志,请求的类、方法、方法中的请求参数
       
        String className = joinPoint.getTarget().getClass().getName();
        String methodName = joinPoint.getSignature().getName();  
  三、获取Log注解的日志信息
    // 设置action动作
    operLog.setBusinessType(log.businessType().ordinal());
    // 设置标题
    operLog.setTitle(log.title());
    // 设置操作人类别
    operLog.setOperatorType(log.operatorType().ordinal());
    // 是否需要保存request,参数和值
    if (log.isSaveRequestData())
    {
        // 获取参数的信息,传入到数据库中。
        setRequestValue(operLog);
    }

  四、将Log交给Spring定时器,定时保存到数据库日志表
    private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService");
    public void execute(TimerTask task) {
    executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);}

五、异步Task工厂类 AsyncFactory
public static TimerTask recordOper(final SysOperLog operLog) {
return new TimerTask()
{
@Override
public void run()
{
// 远程查询操作地点
operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog);
}
};
}
}

}

标签:Log,记录,operLog,注解,操作,日志,public,请求
From: https://www.cnblogs.com/velloLei/p/18306864

相关文章

  • C#中implicit 关键字的使用:隐式转换操作符
    在C#中,implicit 关键字用于定义隐式转换操作符。隐式转换操作符允许自动将一种数据类型转换为另一种类型,而无需显式地调用转换方法或进行类型转换。下面将详细介绍 implicit 关键字的定义和使用。1.隐式转换操作符定义隐式转换操作符可以定义在一个类或结构体中,使得该......
  • 操作系统真象还原:实现文件写入
    14.7实现文件写入这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件本节要实现的sys_write是系统调用write的内核实现,咱们之前的write是个简易版,它是为了临时完成输出打印的功能,不支持文件描述符。如今要让write支持文件描述符的话,还要修改下周边与此系......
  • Linux磁盘-磁盘操作命令
    作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。Linux磁盘涉及到的命令不是很多,但是在实际运维中的作用却很大,因为Linux系统及业务都会承载到硬盘上。如果磁盘使用和配置不合理,可能会引起系统无法启......
  • TS 入门(四):TypeScript 高级类型与类型操作
    目录前言回顾1.联合类型和交叉类型a.联合类型b.交叉类型2.字面量类型3.类型断言4.类型兼容性5.类型守卫a.`typeof`类型守卫b.`instanceof`类型守卫c.自定义类型守卫扩展知识点:类型映射(MappedTypes)结语前言在前三章中,我们介绍了TypeScript的基础知识......
  • BeautifulSoup模块之初识,BeautifulSoup模块之四种对象,BeautifulSoup模块之文档树操
    ⅠBeautifulSoup模块之初识【一】介绍【1】简言简单来说,BeautifulSoup是python的一个库最主要的功能是从网页抓取数据。【2】官方解释BeautifulSoup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要......
  • 第一章 操作系统的概述
    操作系统的概论操作系统的概念操作系统是计算机系统中的一个系统软件,有效的组织和管理计算机系统当中的硬件和软件资源,合理组织计算机的工作流程,控制程序的执行,并给用户提供各种服务,是计算机系统可以高效的运行(资源管理和控制程序的执行)有效:考虑用户的需求,提高系统的资源利用率......
  • git rebase开贴记录
    也可阅读这篇:https://blog.csdn.net/u012459903/article/details/122830997gitrebase 是Git中的一个重要操作,用来重新应用一系列提交到另一个基础提交之上。它的主要作用是将一个分支上的更改应用到另一个分支的顶部,从而使得项目历史更加线性和整洁。基本概念假设你有以下......
  • vue table 表格记录选中
    默认全部选中<el-table:data="tableParams.data"ref="multipleTable"v-loading="loadingTable"@select-all="handleSelectionAll"......
  • SQL常用数据过滤---IN操作符
     在SQL中,IN操作符常用于过滤数据,允许在WHERE子句中指定多个可能的值。如果列中的值匹配IN操作符后面括号中的任何一个值,那么该行就会被选中。以下是使用IN操作符的基本语法:SELECT column1, column2, ... FROM table_name WHERE column_name IN (value1, value2......
  • SQL常用数据过滤---IN操作符
    在SQL中,IN操作符常用于过滤数据,允许在WHERE子句中指定多个可能的值。如果列中的值匹配IN操作符后面括号中的任何一个值,那么该行就会被选中。 以下是使用IN操作符的基本语法:SELECTcolumn1,column2,...FROMtable_nameWHEREcolumn_nameIN(value1,value2,...); ......