外观
审计日志
简介
您可以在日志列表中查看和检索用户行为日志,用于实时审计、问题回溯分析等需求。 在系统中进行的所有操作,只要定义了日志数据,都会记录在审计日志列表中。审计日志可以根据用户的需求来定义日志的展现形式,有效的提取关键信息。审计日志能够有效的帮助用户溯源当时的操作数据,
管理日志定义
菜单路径: 系统 > 审计日志 > 日志定义列表
日志定义就是 定义用户想要记录的接口的操作历史数据,哪个接口,谁访问的,记录条件是什么,参数是什么,返回值是什么,如图所示:
1. 记录接口地址: 接口地址课通过浏览器 F12 查看请求地址,请求地址去掉域名或者 IP 就是接口的请求地址 2. 记录条件(SPEL 表达式): 当满足什么样的条件才记录数据,#{#requestBody['actionName']=='agree'}
当前请求参数中的 actionName 等于 agree,也就是同意按钮 才去记录数据
3. 业务主键获取表达式(SPEL 表达式): 获取业务主键,在日志详情中可以查看得到,#{#requestBody['taskId']}
,主键是 参数中 taskId
4. 记录数据获取表达式(SPEL 表达式): 获取想要记录的关键数据,#{#requestBody[data]}
,关键数据就是返回值的 data 数据
5. 记录日志描述模板(SPEL 表达式): 日志描述模板展示的数据, #{#currentUser.getFullName()} 审批同意流程 #{#bpmInstance.title}
,日志描述模板就是 当前用户 xxx 审批同意流程 xxxx
日志列表
菜单路径: 系统 > 审计日志 > 日志列表
SPEL 表达式
本系统中的审计日志 借助 SPEL 表达式来定义 记录日志的条件,提取请求参数、返回值中的数据以及定义日志的描述信息。
语法参考链接( https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html)
内置变量:
currentUser 当前操作用户; 示例:
#{#currentUser.getFullName()}
requestHeader 请求头;示例:
#{#requestHeader['Referer'][0]}
requestMethod 请求方式(GET,POST,PUT,DELETE);示例:
#{#requestMethod}
requestParam 请求参数,可通过该参数名获取到请求参数,@PathVariable 标注的参数也通过该项获取;示例:
#{#requestParam["account"][0]}
requestTime 请求时间;示例:
#{#dateFormat(#requestTime, "yyyy-MM-dd HH:mm:ss")}
requestBody 请求体,对标注@RequestBody 对象参数获取;示例:
#{#requestBody["id"]}
responseBody 响应结果; 示例:
#{#responseBody.data}
responseTime 响应时间;示例:
#{#dateFormat(#responseTime, "yyyy-MM-dd HH:mm:ss")}
durationMs 处理耗时毫秒;示例:
#{#durationMs}
审计日志变量扩展:
为了更方便的记录关键数据,除了全局的变量,我们支持扩展审计日志变量,满足在特定的接口下获取内置的拓展变量。
使用 com.dstz.base.common.utils.AuditLogVariableUtil.setVariable(name,value)
//引入依赖
<dependency>
<groupId>com.dstz</groupId>
<artifactId>ab-base-common</artifactId>
</dependency>
// 设置审计日志中所需使用变量
AuditLogVariableUtil.setVariable("bpmInstance", getActionModel().getBpmInstance());
内置函数:
isEmpty 是否为空,支持字符串、object、map、collection;示例:
#{#isEmpty(#requestBody['id']) ? '是' : '否'}
dateFormat 日期格式化,格式:#{#dateFormat(date, datePattern)}, 示例:
#{#dateFormat(#responseTime, "yyyy-MM-dd HH:mm:ss")}
strContains 字符串包含,格式:#{#strContains(seq, searchSeq)}, 示例:
#{#strContains(#requestHeader['Referer'][0], 'localhost') ? '是' : '否'}