MySQL高级 - 案例 - AOP记录日志
生活随笔
收集整理的這篇文章主要介紹了
MySQL高级 - 案例 - AOP记录日志
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
自定義注解
通過自定義注解,來標(biāo)示方法需不需要進行記錄日志,如果該方法在訪問時需要記錄日志,則在該方法上標(biāo)示該注解既可。
@Inherited @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface OperateLog { }定義通知類
@Component @Aspect public class OperateAdvice {private static Logger log = Logger.getLogger(OperateAdvice.class);@Autowiredprivate OperationLogService operationLogService;@Around("execution(* cn.leon.controller.*.*(..)) && @annotation(operateLog)")public Object insertLogAround(ProceedingJoinPoint pjp , OperateLog operateLog) throws Throwable{System.out.println(" ************************ 記錄日志 [start] ****************************** ");OperationLog op = new OperationLog();DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");op.setOperateTime(sdf.format(new Date()));op.setOperateUser(DataUtils.getRandStr(8));op.setOperateClass(pjp.getTarget().getClass().getName());op.setOperateMethod(pjp.getSignature().getName());//獲取方法調(diào)用時傳遞的參數(shù)Object[] args = pjp.getArgs();op.setParamAndValue(Arrays.toString(args));long start_time = System.currentTimeMillis();//放行Object object = pjp.proceed();long end_time = System.currentTimeMillis();op.setCostTime(end_time - start_time);if(object != null){op.setReturnClass(object.getClass().getName());op.setReturnValue(object.toString());}else{op.setReturnClass("java.lang.Object");op.setParamAndValue("void");}log.error(JsonUtils.obj2JsonString(op));operationLogService.insert(op);System.out.println(" ************************** 記錄日志 [end] *************************** ");return object;}}方法上加注解
在需要記錄日志的方法上加上注解@OperateLog。
@OperateLog @RequestMapping("/insert") public Result insert(@RequestBody Brand brand){try {brandService.insert(brand);return new Result(true,"操作成功");} catch (Exception e) {e.printStackTrace();return new Result(false,"操作失敗");} }總結(jié)
以上是生活随笔為你收集整理的MySQL高级 - 案例 - AOP记录日志的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL高级 - 案例 - 需求及环境
- 下一篇: MySQL高级 - 案例 - 系统性能优