博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Aop实现日志记录
阅读量:4288 次
发布时间:2019-05-27

本文共 3279 字,大约阅读时间需要 10 分钟。

一 了解Aop的概念

1.连接点

在目标类中能够插入切面的一个点。

2.切点

一个切面并不需要通知应用的所有连接点,切点有助于缩小切面所通知的连接点范围。

  切点其实是定义了需要在哪些连接点上执行通知。

3.通知

  切面的工作被称为通知,通知定义了切面是什么以及何时使用。

    降低了描述切面要完成的工作,通知还姐姐了何时执行这个而工作的问题,5种通知类型。

4.切面

切面是通知和切点的结合,通知和切点共同定义了切面的全部内容。定义是什么,在何时和何处完成其功能。

二 案例

2.1 连接点

将其应用至所有需要加上 日志记录 的模块对应的Controller的操作方法上!!

2.2 切面,切点,通知

//保存日志    private void saveLog(ProceedingJoinPoint point,Long time){        MethodSignature signature= (MethodSignature) point.getSignature();        Method method=signature.getMethod();        SysLogEntity logEntity=new SysLogEntity();        //获取请求操作的描述信息        LogAnnotation logAnnotation=method.getAnnotation(LogAnnotation.class);        if (logAnnotation!=null){            logEntity.setOperation(logAnnotation.value());        }        //获取操作方法名        String className=point.getTarget().getClass().getName();        String methodName=signature.getName();        logEntity.setMethod(new StringBuilder(className).append(".").append(methodName).append("()").toString());        //获取请求参数        Object[] args=point.getArgs();        String params=new Gson().toJson(args[0]);        logEntity.setParams(params);        //获取ip        logEntity.setIp(IPUtil.getIpAddr(HttpContextUtils.getHttpServletRequest()));        //获取剩下的参数        logEntity.setCreateDate(DateTime.now().toDate());        String userName=ShiroUtil.getUserEntity().getUsername();        logEntity.setUsername(userName);        //执行时间        logEntity.setTime(time);        sysLogService.save(logEntity);    }}

2.3 注解

package com.debug.pmp.server.annotation;import java.lang.annotation.*;/** * Created by Administrator on 2019/8/5. */@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface LogAnnotation {    String value() default "";}

 

三 日志管理

3.1 查询列表

//保存日志    private void saveLog(ProceedingJoinPoint point,Long time){        MethodSignature signature= (MethodSignature) point.getSignature();        Method method=signature.getMethod();        SysLogEntity logEntity=new SysLogEntity();        //获取请求操作的描述信息        LogAnnotation logAnnotation=method.getAnnotation(LogAnnotation.class);        if (logAnnotation!=null){            logEntity.setOperation(logAnnotation.value());        }        //获取操作方法名        String className=point.getTarget().getClass().getName();        String methodName=signature.getName();        logEntity.setMethod(new StringBuilder(className).append(".").append(methodName).append("()").toString());        //获取请求参数        Object[] args=point.getArgs();        String params=new Gson().toJson(args[0]);        logEntity.setParams(params);        //获取ip        logEntity.setIp(IPUtil.getIpAddr(HttpContextUtils.getHttpServletRequest()));        //获取剩下的参数        logEntity.setCreateDate(DateTime.now().toDate());        String userName=ShiroUtil.getUserEntity().getUsername();        logEntity.setUsername(userName);        //执行时间        logEntity.setTime(time);        sysLogService.save(logEntity);    }}

3.2 清除日志

//清除	@ResponseBody	@RequestMapping("/truncate")	@RequiresPermissions("sys:log:truncate")	public BaseResponse truncate(){		BaseResponse response=new BaseResponse(StatusCode.Success);		try {			sysLogService.truncate();		}catch (Exception e){			response=new BaseResponse(StatusCode.Fail.getCode(),e.getMessage());		}		return response;	}

 

转载地址:http://hatgi.baihongyu.com/

你可能感兴趣的文章
iOS. NSCache的缓存
查看>>
iOS之属性引用self.xx与_xx的区别
查看>>
iOS 项目的基本配置bundleId/版本命名/....
查看>>
iOS之CoreImage图像处理框架
查看>>
iOS tableview中cell设置的注意事项
查看>>
iOS之文本处框架CoreText(C语言的框架)
查看>>
iOS之文本处理框架TextKit介绍/NSMutableString
查看>>
iOS. Instruments的使用
查看>>
iOS中显示GIF动画
查看>>
iOS CALayer的transform属性(QuartzCore框架)和view的transform属性(CoreGraphics框架)
查看>>
iOS 网络请求判断连接和状态码
查看>>
iOS之ARC内存管理及强弱指针(二)
查看>>
iOS. Xcode7.1中在请求HTTP时报错的解决方法
查看>>
iOS 网络请求数据工具封装
查看>>
iOS之电商项目中的注意事项
查看>>
iOS文字上面划线的几中方式
查看>>
iOS MJRefresh的用法
查看>>
iOS 字典转模型的几中方法、KVC、runtime、YYModel、MJExtention
查看>>
iOS之coreData的原理和使用以及coreData中的多线程问题(二)
查看>>
iOS之支付宝集成(二)
查看>>