您觉得本文档还缺少什么内容?可以自己补充~

@SysLog 记录操作日志

  1. 配置文件介绍
bc:
  log:
    enabled: false  # false=禁止记录操作日志 true=开启
    type: DB   # 日志存储位置   DB=数据库  LOGGER=日志文件
  1. 注解属性介绍详看@SysLog中的注释! 其中value属性是支持SpEL表达式的.
  2. 注解使用举例
// 禁用操作日志
@SysLog(enabled = false)
//  response = false不记录方法的响应参数
@SysLog(value = "'分页列表查询:第' + #params?.current + '页, 显示' + #params?.size + '行'", response = false)
// requestByError = false 表示, 方法报错时, 也不记录请求参数
@SysLog(value = "'保存订单:订单编码' + #data?.code + ', 订单Id:' + #data?.name", request = false, requestByError = false)
  1. SysLog 注解参数详解
/**
 * 是否启用 操作日志
 * 禁用控制优先级:bc.log.enabled = false > 控制器类上@SysLog(enabled = false) > 控制器方法上@SysLog(enabled = false)
 *
 * @return 是否启用
 */
boolean enabled() default true;

/**
 * 操作日志的描述, 支持spring 的 SpEL 表达式。
 *
 * @return {String}
 */
String value() default "";

/**
 * 是否拼接Controller类上@Api注解的描述值
 *
 * @return 是否拼接Controller类上的描述值
 */
boolean controllerApiValue() default true;

/**
 * 是否记录方法的入参
 *
 * @return 是否记录方法的入参
 */
boolean request() default true;

/**
 * 若设置了 request = false、requestByError = true,则方法报错时,依然记录请求的入参
 *
 * @return 当 request = false时, 方法报错记录请求参数
 */
boolean requestByError() default true;

/**
 * 是否记录返回值
 *
 * @return 是否记录返回值
 */
boolean response() default true;

原理:

通过AOP拦截标记了@SysLog 的方法, 拦截后, SysLogAspect 中的方法用于获取被拦截方法的入参和返回值. 然后发布一个 SysLogEvent 事件 (为了让操作日志尽可能少的影响方法调用时长,采用事件方式来异步处理, 也可以改成消息队列之类的), SysLogListener 监听器接收到事件后, 调用 consumer.accept 方法, 让对操作日志进行存储.

results matching ""

    No results matching ""