数据库日志记录方法、装置、计算机设备及计算机可读存储介质与流程

未命名 08-12 阅读:93 评论:0


1.本发明属于数据库管理技术领域,具体涉及一种数据库日志记录方法、装置、计算机设备及计算机可读存储介质。


背景技术:

2.业务系统是指企业达成定位所需要的业务环节、各合作伙伴扮演的角色以及利益相关者合作与交易的方式和内容。为了满足企业审计及监管要求,业务系统需要记录每条数据以及每个字段的变化情况。
3.目前,业务系统的数据库日志记录方式通常有如下两种:
4.(1)在业务代码中进行硬编码,然后在执行所述业务代码时利用该硬编码生成数据库日志信息;但是这样会修改原有的业务代码,对原有的业务系统产生侵入性,同时增大了程序出现错误的风险;
5.(2)异步分析日志文件并进行处理,得到数据库日志信息;但是由于日志文件通常是不易被用户所直观看懂的,这就造成了在分析日志文件时,需要投入额外的精力去感知,同时在所述日志文件中通常不会包含操作用户的信息,这又将造成在分析日志文件时,难以分辨是由谁进行了数据库表操作;以及还为了应对在分析日志文件时的种种情况,通常需要在初期就对业务系统进行良好的设计,但这样又会对已经成型的或再运行的业务系统带来过高的系统重置成本。


技术实现要素:

6.本发明的目的是提供一种数据库日志记录方法、装置、计算机设备及计算机可读存储介质,用以解决现有数据库日志记录方式所存在会对原有业务系统产生侵入性影响、需投入额外精力去感知日志文件、难以分辨操作人员以及可能带来过高的业务系统重置成本的问题。
7.为了实现上述目的,本发明采用以下技术方案:
8.第一方面,提供了一种数据库日志记录方法,包括:
9.在收到由用户发起的数据库操作请求后,启动执行用于响应所述数据库操作请求的业务代码;
10.在所述业务代码执行数据库操作函数时,将java注解添加到所述数据库操作函数中,其中,所述java注解是指在与操作目标数据库表一一对应的java实体类中,对所述操作目标数据库表中的各个字段进行标注的内容;
11.在所述数据库操作函数执行对所述操作目标数据库表的数据库操作时,基于面向切面编程aop拦截所述数据库操作,并切入执行如下的处理逻辑(a)或(b):
12.(a)若所述数据库操作为字段新增操作或字段删除操作,则先根据所述java注解进行说明性质的描述性日志处理,得到描述性日志内容;然后执行所述数据库操作并保存
业务数据;最后将记录所述数据库操作的时间戳作为日志信息产生时间戳,与所述描述性日志内容一起作为一条数据库日志信息添加到日志记录缓冲池中;
13.(b)若所述数据库操作为字段修改操作,则先根据所述java注解执行用于查询修改前数据状态的函数,得到所述操作目标数据库表的修改前数据状态;然后执行所述数据库操作并保存业务数据;再然后通过字段一一对比方式对比确定所述修改前数据状态与所述操作目标数据库表的修改后数据状态的差异字段,再然后根据在所述java注解中的且所述差异字段的标注内容进行翻译处理,得到用于反映所述差异字段的变更情况的字段型日志内容;最后将记录所述数据库操作的时间戳作为日志信息产生时间戳,与所述字段型日志内容一起作为一条数据库日志信息添加到日志记录缓冲池中;
14.在因所述业务代码执行完成而结束响应所述数据库操作请求时,获取所述用户的用户信息;
15.通过调用日志信息的持久化接口,将所述数据库日志信息和所述用户信息一起绑定保存在数据库表中。
16.基于上述发明内容,提供了一种基于java注解和面向切面编程aop的数据库日志记录新方案,即在收到由用户发起的数据库操作请求后,先启动执行用于响应请求的业务代码,然后在业务代码执行数据库操作函数时,将java注解添加到函数中,再然后在该函数执行对目标数据库表的数据库操作时,基于面向切面编程aop拦截操作,并根据java注解切入执行得到在字段新增/删除操作时的描述性日志内容或者在字段修改操作时的且用于反映差异字段变更情况的字段型日志内容,最后获取用户信息,并与日志内容和日志信息产生时间戳一起绑定保存在数据库表中,由此无需对业务代码进行硬编码以及分析日志文件,可以避免对原有业务系统产生侵入性影响、投入额外精力去感知日志文件以及带来业务系统重置成本,同时由于会绑定日志信息和用户信息,还可以清楚分辨操作人员,利于后续企业审计和监管,便于实际应用和推广,便于实际应用和推广。
17.在一个可能的设计中,所述内容包含有字段类型、字段含义、字段名称以及handler处理函数的spel表达式。
18.在一个可能的设计中,根据所述java注解进行说明性质的描述性日志处理,得到描述性日志内容,包括:
19.根据在所述java注解中的且被删字段或新增字段的spel表达式进行说明性质的描述性日志处理,得到描述性日志内容。
20.在一个可能的设计中,通过字段一一对比方式对比确定所述修改前数据状态与所述操作目标数据库表的修改后数据状态的差异字段,包括:
21.当所述数据库操作为用于对多个字段进行修改的字段修改操作时,将本次字段修改操作的入参实体类作为所述操作目标数据库表的修改后数据状态,然后通过字段一一对比方式对比确定所述修改前数据状态与该修改后数据状态的差异字段。
22.在一个可能的设计中,根据在所述java注解中的且所述差异字段的标注内容进行翻译处理,得到用于反映所述差异字段的变更情况的字段型日志内容,包括:
23.根据在所述java注解中的且所述差异字段的spel表达式/和字段类型进行翻译处理,得到用于反映所述差异字段的变更情况的字段型日志内容。
24.在一个可能的设计中,在基于面向切面编程aop拦截所述数据库操作,并切入执行
处理逻辑(a)或(b)之后,所述方法还包括有:
25.在因所述业务代码执行终止而退出响应所述数据库操作请求时,将所述数据库日志信息从所述日志记录缓冲池中剔除。
26.在一个可能的设计中,在因所述业务代码执行完成而结束响应所述数据库操作请求时,获取所述用户的用户信息,包括:
27.在因所述业务代码执行完成而结束响应所述数据库操作请求时,调用用户接口userinterface获取所述用户的用户信息。
28.第二方面,提供了一种数据库日志记录装置,包括有依次通信连接的代码启动执行模块、java注解添加模块、处理逻辑执行模块、用户信息获取模块和信息绑定保存模块;
29.所述代码启动执行模块用于在收到由用户发起的数据库操作请求后,启动执行用于响应所述数据库操作请求的业务代码;
30.所述java注解添加模块用于在所述业务代码执行数据库操作函数时,将java注解添加到所述数据库操作函数中,其中,所述java注解是指在与操作目标数据库表一一对应的java实体类中,对所述操作目标数据库表中的各个字段进行标注的内容;
31.所述处理逻辑执行模块用于在所述数据库操作函数执行对所述操作目标数据库表的数据库操作时,基于面向切面编程aop拦截所述数据库操作,并切入执行如下的处理逻辑(a)或(b):
32.(a)若所述数据库操作为字段新增操作或字段删除操作,则先根据所述java注解进行说明性质的描述性日志处理,得到描述性日志内容;然后执行所述数据库操作并保存业务数据;最后将记录所述数据库操作的时间戳作为日志信息产生时间戳,与所述描述性日志内容一起作为一条数据库日志信息添加到日志记录缓冲池中;
33.(b)若所述数据库操作为字段修改操作,则先根据所述java注解执行用于查询修改前数据状态的函数,得到所述操作目标数据库表的修改前数据状态;然后执行所述数据库操作并保存业务数据;再然后通过字段一一对比方式对比确定所述修改前数据状态与所述操作目标数据库表的修改后数据状态的差异字段,再然后根据在所述java注解中的且所述差异字段的标注内容进行翻译处理,得到用于反映所述差异字段的变更情况的字段型日志内容;最后将记录所述数据库操作的时间戳作为日志信息产生时间戳,与所述字段型日志内容一起作为一条数据库日志信息添加到日志记录缓冲池中;
34.所述户信息获取模块用于在因所述业务代码执行完成而结束响应所述数据库操作请求时,获取所述用户的用户信息;
35.所述信息绑定保存模块用于通过调用日志信息的持久化接口,将所述数据库日志信息和所述用户信息一起绑定保存在数据库表中。
36.第三方面,本发明提供了一种计算机设备,包括有依次通信连接的存储器、处理器和收发器,其中,所述存储器用于存储计算机程序,所述收发器用于收发消息,所述处理器用于读取所述计算机程序,执行如第一方面或第一方面中任意可能设计所述的数据库日志记录方法。
37.第四方面,本发明提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,当所述指令在计算机上运行时,执行如第一方面或第一方面中任意可能设计所述的数据库日志记录方法。
38.第五方面,本发明提供了一种包含指令的计算机程序产品,当所述指令在计算机上运行时,使所述计算机执行如第一方面或第一方面中任意可能设计所述的数据库日志记录方法。
39.上述方案的有益效果:
40.(1)本发明创造性提供了一种基于java注解和面向切面编程aop的数据库日志记录新方案,即在收到由用户发起的数据库操作请求后,先启动执行用于响应请求的业务代码,然后在业务代码执行数据库操作函数时,将java注解添加到函数中,再然后在该函数执行对目标数据库表的数据库操作时,基于面向切面编程aop拦截操作,并根据java注解切入执行得到在字段新增/删除操作时的描述性日志内容或者在字段修改操作时的且用于反映差异字段变更情况的字段型日志内容,最后获取用户信息,并与日志内容和日志信息产生时间戳一起绑定保存在数据库表中,由此无需对业务代码进行硬编码以及分析日志文件,可以避免对原有业务系统产生侵入性影响、投入额外精力去感知日志文件以及带来业务系统重置成本,同时由于会绑定日志信息和用户信息,还可以清楚分辨操作人员,利于后续企业审计和监管,便于实际应用和推广;
41.(2)由于日志处理部分抽象到实体类层面,从而可与业务上的逻辑代码进行脱离,不会对原有的代码逻辑造成侵入,也减少了对原本业务系统的修改;
42.(3)由于引入了spel表达式,可在支持对日志描述进行自定义时,也增强了日志的可读性,不会出现用户无法看懂的情况;
43.(4)由于日志处理的相关代码集成在业务系统中,与业务系统共用一个事务,可以保证在业务系统出现错误导致数据没有正确修改时,日志变更记录中不会存在脏数据;
44.(5)由于引入了日志处理的缓冲池,提高了日志存储的执行效率。
附图说明
45.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
46.图1为本技术实施例提供的数据库日志记录方法的流程示意图。
47.图2为本技术实施例提供的数据库日志记录装置的结构示意图。
48.图3为本技术实施例提供的计算机设备的结构示意图。
具体实施方式
49.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将结合附图和实施例或现有技术的描述对本发明作简单地介绍,显而易见地,下面关于附图结构的描述仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在此需要说明的是,对于这些实施例方式的说明用于帮助理解本发明,但并不构成对本发明的限定。
50.应当理解,尽管本文可能使用术语第一和第二等等来描述各种对象,但是这些对象不应当受到这些术语的限制。这些术语仅用于区分一个对象和另一个对象。例如可以将
第一对象称作第二对象,并且类似地可以将第二对象称作第一对象,同时不脱离本发明的示例实施例的范围。
51.应当理解,对于本文中可能出现的术语“和/或”,其仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a、单独存在b或者同时存在a和b等三种情况;又例如,a、b和/或c,可以表示存在a、b和c中的任意一种或他们的任意组合;对于本文中可能出现的术语“/和”,其是描述另一种关联对象关系,表示可以存在两种关系,例如,a/和b,可以表示:单独存在a或者同时存在a和b等两种情况;另外,对于本文中可能出现的字符“/”,一般表示前后关联对象是一种“或”关系。
52.实施例:
53.如图1所示,本实施例第一方面提供的所述数据库日志记录方法,可以但不限于由具有一定计算资源的且通信连接有用户终端的计算机设备执行,例如由平台服务器、个人计算机(personal computer,pc,指一种大小、价格和性能适用于个人使用的多用途计算机;台式机、笔记本电脑到小型笔记本电脑和平板电脑以及超级本等都属于个人计算机)、智能手机、个人数字助理(personal digital assistant,pda)或可穿戴设备等电子设备执行。如图1所示,所述数据库日志记录方法,可以但不限于包括有如下步骤s1~s5。
54.s1.在收到由用户发起的数据库操作请求后,启动执行用于响应所述数据库操作请求的业务代码。
55.在所述步骤s1中,所述数据库操作请求可以但不限于由所述用户通过所持有的用户终端来发起,例如通过点击所述用户终端上的某个按钮来发起一个用于执行数据库操作的网络调用请求。所述业务代码为现有业务系统的必备元素之一,可以通过常规方式响应所述数据库操作请求并启动执行。此外,所述用户终端可以但不限于具体包括有个人计算机、智能手机、个人数字助理或可穿戴设备等电子设备,等等。
56.s2.在所述业务代码执行数据库操作函数时,将java注解添加到所述数据库操作函数中,其中,所述java注解是指在与操作目标数据库表一一对应的java实体类中,对所述操作目标数据库表中的各个字段进行标注的内容。
57.在所述步骤s2中,由于在基于java编程技术开发的业务系统中,通常采用java实体类与数据库表一一对应的处理方式,因此可以在该java实体类中对该数据库表中的各个字段进行标注,以便指明对应字段的字段类型、字段含义、字段名称以及handler处理函数(其是一种现有处理函数)的spel(全称为“spring expression language”,即spring表达式语言)表达式等,这样在使用java实体类进行数据库表的字段新增、字段修改和字段删除时,就可以清楚地知道每个字段所代表的意思,以及如何在日志记录时进行处理。具体的,所述内容包含但不限于有字段类型、字段含义、字段名称以及handler处理函数的spel表达式等。此外,所述数据库操作函数也可以在现有业务系统中常规得到并应用执行。
58.s3.在所述数据库操作函数执行对所述操作目标数据库表的数据库操作时,基于面向切面编程aop拦截所述数据库操作,并切入执行如下的处理逻辑(a)或(b)。
59.(a)若所述数据库操作为字段新增操作或字段删除操作,则先根据所述java注解进行说明性质的描述性日志处理,得到描述性日志内容;然后执行所述数据库操作并保存业务数据;最后将记录所述数据库操作的时间戳作为日志信息产生时间戳,与所述描述性日志内容一起作为一条数据库日志信息添加到日志记录缓冲池中。
60.在上述处理逻辑(a)中,所述描述性日志内容具体为一句描述性文本,可以不详细记录每个新增字段的数据情况,也可以详细记录所述每个新增字段的数据情况。具体的,根据所述java注解进行说明性质的描述性日志处理,得到描述性日志内容,包括但不限于:根据在所述java注解中的且被删字段或新增字段的spel表达式进行说明性质的描述性日志处理,得到描述性日志内容;前述描述性日志处理的具体过程为现有过程,于此不再赘述。以及具体的,所述日志信息产生时间戳和所述描述性日志内容可以封装成一个日志实体,然后将该日志实体作为一条数据库日志信息添加到日志记录缓冲池中,以等待持久化。此外,执行所述数据库操作并保存业务数据,为现有业务系统中的常规技术手段。
61.(b)若所述数据库操作为字段修改操作,则先根据所述java注解执行用于查询修改前数据状态的函数,得到所述操作目标数据库表的修改前数据状态;然后执行所述数据库操作并保存业务数据;再然后通过字段一一对比方式对比确定所述修改前数据状态与所述操作目标数据库表的修改后数据状态的差异字段,再然后根据在所述java注解中的且所述差异字段的标注内容进行翻译处理,得到用于反映所述差异字段的变更情况的字段型日志内容;最后将记录所述数据库操作的时间戳作为日志信息产生时间戳,与所述字段型日志内容一起作为一条数据库日志信息添加到日志记录缓冲池中。
62.在上述处理逻辑(b)中,由于在java实体类中标记每个字段的字段类型、字段含义以及非文本字段时需要定义handler属性(即spel表达式),因此可以具体使用spel表达式来翻译在字段修改操作时需要对目标字段进行怎样的处理,进而可翻译得到用户能够直观看懂的信息,即优选的,根据在所述java注解中的且所述差异字段的标注内容进行翻译处理,得到用于反映所述差异字段的变更情况的字段型日志内容,包括但不限于有:根据在所述java注解中的且所述差异字段的spel表达式/和字段类型进行翻译处理,得到用于反映所述差异字段的变更情况的字段型日志内容。同时考虑存在一次修改多个字段的情况,此时可以提供一个再次执行一次数据库表状态查询的可选项,而若该可选项没有标记在所述数据库操作函数中,那么可使用数据库修改操作的入参作为数据的最新状态,即通过字段一一对比方式对比确定所述修改前数据状态与所述操作目标数据库表的修改后数据状态的差异字段,包括但不限于有:当所述数据库操作为用于对多个字段进行修改的字段修改操作时,将本次字段修改操作的入参实体类作为所述操作目标数据库表的修改后数据状态,然后通过字段一一对比方式对比确定所述修改前数据状态与该修改后数据状态的差异字段。此外,所述日志信息产生时间戳和所述字段型日志内容也可以封装成一个日志实体,然后将该日志实体作为一条数据库日志信息添加到日志记录缓冲池中,以等待持久化。
63.在所述步骤s3中,由于所述面向切面编程aop(即aspect oriented programming的缩写)是指通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术,因此可以基于此技术拦截所述数据库操作,并切入执行前述的处理逻辑(a)或(b)。此外,所述面向切面编程aop还可进行对所述业务代码的增强处理。
64.s4.在因所述业务代码执行完成而结束响应所述数据库操作请求时,获取所述用户的用户信息。
65.在所述步骤s4中,所述用户信息用于唯一标识所述用户,具体可以但不限于包含有所述用户的账号、登录密码、姓名和通讯手机号等内容。具体的,在因所述业务代码执行完成而结束响应所述数据库操作请求时,获取所述用户的用户信息,包括但不限于:在因所
述业务代码执行完成而结束响应所述数据库操作请求时,调用用户接口userinterface获取所述用户的用户信息。前述用户接口userinterface可由现有业务系统予以提供。此外,考虑所述业务代码在执行过程中可能因出现意外问题而终止,为了确保日志记录结果不会出现差错或脏数据,优选的,在基于面向切面编程aop拦截所述数据库操作,并切入执行处理逻辑(a)或(b)之后,所述方法还包括但不限于有:在因所述业务代码执行终止而退出响应所述数据库操作请求时,将所述数据库日志信息从所述日志记录缓冲池中剔除。
66.s5.通过调用日志信息的持久化接口,将所述数据库日志信息和所述用户信息一起绑定保存在数据库表中。
67.在所述步骤s5中,所述持久化接口也可由现有业务系统予以提供。由于已将所述数据库日志信息和所述用户信息一起绑定保存在数据库表中,因此可以备企业随时审计及监管。在将所述数据库日志信息和所述用户信息一起绑定保存在数据库表中之后,也需要将所述数据库日志信息从所述日志记录缓冲池中剔除,以便及时释放对所述日志记录缓冲池的占用资源。此外,所述数据库表可以与所述操作目标数据库表为同一数据表,也可以不为同一数据表。
68.由此基于前述步骤s1~s5所描述的数据库日志记录方法,提供了一种基于java注解和面向切面编程aop的数据库日志记录新方案,即在收到由用户发起的数据库操作请求后,先启动执行用于响应请求的业务代码,然后在业务代码执行数据库操作函数时,将java注解添加到函数中,再然后在该函数执行对目标数据库表的数据库操作时,基于面向切面编程aop拦截操作,并根据java注解切入执行得到在字段新增/删除操作时的描述性日志内容或者在字段修改操作时的且用于反映差异字段变更情况的字段型日志内容,最后获取用户信息,并与日志内容和日志信息产生时间戳一起绑定保存在数据库表中,由此无需对业务代码进行硬编码以及分析日志文件,可以避免对原有业务系统产生侵入性影响、投入额外精力去感知日志文件以及带来业务系统重置成本,同时由于会绑定日志信息和用户信息,还可以清楚分辨操作人员,利于后续企业审计和监管,便于实际应用和推广。
69.如图2所示,本实施例第二方面提供了一种实现第一方面所述的数据库日志记录方法的虚拟装置,包括有依次通信连接的代码启动执行模块、java注解添加模块、处理逻辑执行模块、用户信息获取模块和信息绑定保存模块。
70.所述代码启动执行模块用于在收到由用户发起的数据库操作请求后,启动执行用于响应所述数据库操作请求的业务代码。
71.所述java注解添加模块用于在所述业务代码执行数据库操作函数时,将java注解添加到所述数据库操作函数中,其中,所述java注解是指在与操作目标数据库表一一对应的java实体类中,对所述操作目标数据库表中的各个字段进行标注的内容。
72.所述处理逻辑执行模块用于在所述数据库操作函数执行对所述操作目标数据库表的数据库操作时,基于面向切面编程aop拦截所述数据库操作,并切入执行如下的处理逻辑(a)或(b):
73.(a)若所述数据库操作为字段新增操作或字段删除操作,则先根据所述java注解进行说明性质的描述性日志处理,得到描述性日志内容;然后执行所述数据库操作并保存业务数据;最后将记录所述数据库操作的时间戳作为日志信息产生时间戳,与所述描述性日志内容一起作为一条数据库日志信息添加到日志记录缓冲池中;
74.(b)若所述数据库操作为字段修改操作,则先根据所述java注解执行用于查询修改前数据状态的函数,得到所述操作目标数据库表的修改前数据状态;然后执行所述数据库操作并保存业务数据;再然后通过字段一一对比方式对比确定所述修改前数据状态与所述操作目标数据库表的修改后数据状态的差异字段,再然后根据在所述java注解中的且所述差异字段的标注内容进行翻译处理,得到用于反映所述差异字段的变更情况的字段型日志内容;最后将记录所述数据库操作的时间戳作为日志信息产生时间戳,与所述字段型日志内容一起作为一条数据库日志信息添加到日志记录缓冲池中;
75.所述户信息获取模块用于在因所述业务代码执行完成而结束响应所述数据库操作请求时,获取所述用户的用户信息;
76.所述信息绑定保存模块用于通过调用日志信息的持久化接口,将所述数据库日志信息和所述用户信息一起绑定保存在数据库表中。
77.本实施例第二方面提供的前述装置的工作过程、工作细节和技术效果,可以参见第一方面所述的数据库日志记录方法,于此不再赘述。
78.如图3所示,本实施例第三方面提供了一种执行如第一方面所述的数据库日志记录方法的计算机设备,包括有依次通信连接的存储器、处理器和收发器,其中,所述存储器用于存储计算机程序,所述收发器用于收发消息,所述处理器用于读取所述计算机程序,执行如第一方面所述的数据库日志记录方法。具体举例的,所述存储器可以但不限于包括随机存取存储器(random-access memory,ram)、只读存储器(read-only memory,rom)、闪存(flash memory)、先进先出存储器(first input first output,fifo)和/或先进后出存储器(first input last output,filo)等等;所述处理器可以但不限于采用型号为stm32f105系列的微处理器。此外,所述计算机设备还可以但不限于包括有电源模块、显示屏和其它必要的部件。
79.本实施例第三方面提供的前述计算机设备的工作过程、工作细节和技术效果,可以参见第一方面所述的数据库日志记录方法,于此不再赘述。
80.本实施例第四方面提供了一种存储包含如第一方面所述的数据库日志记录方法的指令的计算机可读存储介质,即所述计算机可读存储介质上存储有指令,当所述指令在计算机上运行时,执行如第一方面所述的数据库日志记录方法。所述计算机可读存储介质是指存储数据的载体,可以但不限于包括软盘、光盘、硬盘、闪存、优盘和/或记忆棒(memory stick)等计算机可读存储介质,所述计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。
81.本实施例第四方面提供的前述计算机可读存储介质的工作过程、工作细节和技术效果,可以参见如第一方面所述的数据库日志记录方法,于此不再赘述。
82.本实施例第五方面提供了一种包含指令的计算机程序产品,当所述指令在计算机上运行时,使所述计算机执行如第一方面所述的数据库日志记录方法。所述计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。
83.最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术特征:
1.一种数据库日志记录方法,其特征在于,包括:在收到由用户发起的数据库操作请求后,启动执行用于响应所述数据库操作请求的业务代码;在所述业务代码执行数据库操作函数时,将java注解添加到所述数据库操作函数中,其中,所述java注解是指在与操作目标数据库表一一对应的java实体类中,对所述操作目标数据库表中的各个字段进行标注的内容;在所述数据库操作函数执行对所述操作目标数据库表的数据库操作时,基于面向切面编程aop拦截所述数据库操作,并切入执行如下的处理逻辑(a)或(b):(a)若所述数据库操作为字段新增操作或字段删除操作,则先根据所述java注解进行说明性质的描述性日志处理,得到描述性日志内容;然后执行所述数据库操作并保存业务数据;最后将记录所述数据库操作的时间戳作为日志信息产生时间戳,与所述描述性日志内容一起作为一条数据库日志信息添加到日志记录缓冲池中;(b)若所述数据库操作为字段修改操作,则先根据所述java注解执行用于查询修改前数据状态的函数,得到所述操作目标数据库表的修改前数据状态;然后执行所述数据库操作并保存业务数据;再然后通过字段一一对比方式对比确定所述修改前数据状态与所述操作目标数据库表的修改后数据状态的差异字段,再然后根据在所述java注解中的且所述差异字段的标注内容进行翻译处理,得到用于反映所述差异字段的变更情况的字段型日志内容;最后将记录所述数据库操作的时间戳作为日志信息产生时间戳,与所述字段型日志内容一起作为一条数据库日志信息添加到日志记录缓冲池中;在因所述业务代码执行完成而结束响应所述数据库操作请求时,获取所述用户的用户信息;通过调用日志信息的持久化接口,将所述数据库日志信息和所述用户信息一起绑定保存在数据库表中。2.根据权利要求1所述的数据库日志记录方法,其特征在于,所述内容包含有字段类型、字段含义、字段名称以及handler处理函数的spel表达式。3.根据权利要求1所述的数据库日志记录方法,其特征在于,根据所述java注解进行说明性质的描述性日志处理,得到描述性日志内容,包括:根据在所述java注解中的且被删字段或新增字段的spel表达式进行说明性质的描述性日志处理,得到描述性日志内容。4.根据权利要求1所述的数据库日志记录方法,其特征在于,通过字段一一对比方式对比确定所述修改前数据状态与所述操作目标数据库表的修改后数据状态的差异字段,包括:当所述数据库操作为用于对多个字段进行修改的字段修改操作时,将本次字段修改操作的入参实体类作为所述操作目标数据库表的修改后数据状态,然后通过字段一一对比方式对比确定所述修改前数据状态与该修改后数据状态的差异字段。5.根据权利要求1所述的数据库日志记录方法,其特征在于,根据在所述java注解中的且所述差异字段的标注内容进行翻译处理,得到用于反映所述差异字段的变更情况的字段型日志内容,包括:根据在所述java注解中的且所述差异字段的spel表达式/和字段类型进行翻译处理,
得到用于反映所述差异字段的变更情况的字段型日志内容。6.根据权利要求1~5中任意一项所述的数据库日志记录方法,其特征在于,在基于面向切面编程aop拦截所述数据库操作,并切入执行处理逻辑(a)或(b)之后,所述方法还包括有:在因所述业务代码执行终止而退出响应所述数据库操作请求时,将所述数据库日志信息从所述日志记录缓冲池中剔除。7.根据权利要求1所述的数据库日志记录方法,其特征在于,在因所述业务代码执行完成而结束响应所述数据库操作请求时,获取所述用户的用户信息,包括:在因所述业务代码执行完成而结束响应所述数据库操作请求时,调用用户接口userinterface获取所述用户的用户信息。8.一种数据库日志记录装置,其特征在于,包括有依次通信连接的代码启动执行模块、java注解添加模块、处理逻辑执行模块、用户信息获取模块和信息绑定保存模块;所述代码启动执行模块用于在收到由用户发起的数据库操作请求后,启动执行用于响应所述数据库操作请求的业务代码;所述java注解添加模块用于在所述业务代码执行数据库操作函数时,将java注解添加到所述数据库操作函数中,其中,所述java注解是指在与操作目标数据库表一一对应的java实体类中,对所述操作目标数据库表中的各个字段进行标注的内容;所述处理逻辑执行模块用于在所述数据库操作函数执行对所述操作目标数据库表的数据库操作时,基于面向切面编程aop拦截所述数据库操作,并切入执行如下的处理逻辑(a)或(b):(a)若所述数据库操作为字段新增操作或字段删除操作,则先根据所述java注解进行说明性质的描述性日志处理,得到描述性日志内容;然后执行所述数据库操作并保存业务数据;最后将记录所述数据库操作的时间戳作为日志信息产生时间戳,与所述描述性日志内容一起作为一条数据库日志信息添加到日志记录缓冲池中;(b)若所述数据库操作为字段修改操作,则先根据所述java注解执行用于查询修改前数据状态的函数,得到所述操作目标数据库表的修改前数据状态;然后执行所述数据库操作并保存业务数据;再然后通过字段一一对比方式对比确定所述修改前数据状态与所述操作目标数据库表的修改后数据状态的差异字段,再然后根据在所述java注解中的且所述差异字段的标注内容进行翻译处理,得到用于反映所述差异字段的变更情况的字段型日志内容;最后将记录所述数据库操作的时间戳作为日志信息产生时间戳,与所述字段型日志内容一起作为一条数据库日志信息添加到日志记录缓冲池中;所述户信息获取模块用于在因所述业务代码执行完成而结束响应所述数据库操作请求时,获取所述用户的用户信息;所述信息绑定保存模块用于通过调用日志信息的持久化接口,将所述数据库日志信息和所述用户信息一起绑定保存在数据库表中。9.一种计算机设备,其特征在于,包括有依次通信连接的存储器、处理器和收发器,其中,所述存储器用于存储计算机程序,所述收发器用于收发消息,所述处理器用于读取所述计算机程序,执行如权利要求1~7中任意一项所述的数据库日志记录方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有指令,
当所述指令在计算机上运行时,执行如权利要求1~7中任意一项所述的数据库日志记录方法。

技术总结
本发明公开了一种数据库日志记录方法、装置、计算机设备及计算机可读存储介质,涉及数据库管理技术领域。所述方法是在收到数据库操作请求后,先启动执行用于响应请求的业务代码,然后在业务代码执行数据库操作函数时,将Java注解添加到函数中,再然后在该函数执行对目标数据库表的数据库操作时,基于面向切面编程拦截操作,并根据Java注解切入执行得到在字段新增/删除操作时的描述性日志内容或者在字段修改操作时的且用于反映差异字段变更情况的字段型日志内容,最后获取用户信息,并与日志内容和日志信息产生时间戳一起绑定保存在数据库表中,由此可避免对原有业务系统产生侵入性影响,并清楚分辨操作人员,利于后续企业审计和监管。审计和监管。审计和监管。


技术研发人员:刘欣毅 马优生
受保护的技术使用者:北京洞悉网络有限公司
技术研发日:2023.05.10
技术公布日:2023/8/9
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐