在调用接口的时候在接口上方使用
@Log注解
/**
* 查询系统参数列表
*/
@PreAuthorize("@ss.hasPermi('system:parameter:list')")
@Log(title = "系统参数", businessType = BusinessType.QUERY)
@GetMapping("/list")
public Result<?> queryPageList(SysParameter sysParameter,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<SysParameter> queryWrapper = QueryGenerator.initQueryWrapper(sysParameter, req.getParameterMap());
Page<SysParameter> page = new Page<SysParameter>(pageNo, pageSize);
IPage<SysParameter> sysParameterList = sysParameterService.page(page, queryWrapper);
return Result.ok(sysParameterList);
}
通过跳转找到@Log注解。
/**
* 自定义操作日志记录注解
*
* @author ruoyi
*
*/
@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;
/**
* 是否保存响应的参数
*/
public boolean isSaveResponseData() default true;
/**
* 排除指定的请求参数
*/
public String[] excludeParamNames() default {};
}
通过注解找到其切片代码,如果使用IDEA可以双击shift键查询。
一般注解实现类的命名都会在原类后面加上Aspect
如Log则找到LogAspect
@Aspect @Component public class LogAspect
找到以下代码:
/** * 获取注解中对方法的描述信息 用于Controller层注解 * * @param log 日志 * @param operLog 操作日志 * @throws Exception */ public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog, Object jsonResult) throws Exception { // 设置action动作 operLog.setBusinessType(log.businessType().ordinal()); // 设置标题 operLog.setTitle(log.title()); // 设置操作人类别 operLog.setOperatorType(log.operatorType().ordinal()); // 是否需要保存request,参数和值 if (log.isSaveRequestData()) { // 获取参数的信息,传入到数据库中。 setRequestValue(joinPoint, operLog, log.excludeParamNames()); } // 是否需要保存response,参数和值 if (log.isSaveResponseData() && StringUtils.isNotNull(jsonResult)) { operLog.setJsonResult(StringUtils.substring(JSON.toJSONString(jsonResult), 0, 2000)); } }
// 设置action动作
operLog.setBusinessType(log.businessType().ordinal());
方法通过这种方式给日志定义类型。这行代码是在获取枚举类型的
businessType
的序号(ordinal)。在Java中,枚举类型的每个枚举常量都有一个相关的整数值,该值从零开始,表示其在枚举声明中的位置。因此,log.businessType().ordinal()
返回的是businessType
枚举常量的序号。
根据其逻辑我们就可以在他的业务类型得类中加入新的类型。
/** * 业务操作类型 * * @author ruoyi */ public enum BusinessType { /** * 其它 */ OTHER, /** * 新增 */ INSERT, /** * 修改 */ UPDATE, /** * 删除 */ DELETE, /** * 授权 */ GRANT, /** * 导出 */ EXPORT, /** * 导入 */ IMPORT, /** * 强退 */ FORCE, /** * 生成代码 */ GENCODE, /** * 清空数据 */ CLEAN, /** * 查询 */ QUERY }
按照BusinessType枚举类中,我自定义的QUERY在最下面,而其对应的应该是10。