springboot自定义注解日志管理

2019-08-31 20:18:55  卢浮宫  阅读量:214  版权声明:本文为站长原创文章,转载请写明出处


一、背景

    一个好的项目是必须有完备的日志系统的,处理我们前面文章提到的logbck,这里使用自定义注解做一个新的日志管理。

二、模块结构

    大体上包含以下几个部分:

    1、日志管理aop切点类SysLogAspect

    2、系统日志的注解

    3、系统日志的 m v c

    4、mapper处理文件

三、实现过程

    1、aop的老一套,声明切点类,这里使用@Aspect注解

    2、声明切点    @pointcut

    3、声明环绕通知,记录日志

    4、插一句为什么使用环绕通知:

        ①使用环绕通知可以自由调用,前置、后置则不好处理

        ②自由返回数据

四、贴代码吧(这里只贴出1和2,有需要可以M我)

    1、切点类

        /**

 * @author XA
* @date 2019/8/31
* * @time 10:09
* @desc:日志管理,aop切点类
*/
@Aspect
@Component
public class SysLogAspect {

@Autowired
private SysLogServiceImpl sysLogService;

@Pointcut("@annotation(com.xa.guangmuhua.Log.SysLog)")
public void logPointCut() {

}

@Around("logPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
long beginTime = System.currentTimeMillis();
//执行方法
Object result = point.proceed();
//执行时长(毫秒)
long time = System.currentTimeMillis() - beginTime;
//保存日志
saveSysLog(point, time);
return result;
}

private void saveSysLog(ProceedingJoinPoint joinPoint, long time) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
SysLogEntity sysLog = new SysLogEntity();
SysLog syslog = method.getAnnotation(SysLog.class);
if(syslog != null){
//注解上的描述
sysLog.setOperation(syslog.value());
}
//请求的方法名
String className = joinPoint.getTarget().getClass().getName();
String methodName = signature.getName();
sysLog.setMethod(className + "." + methodName + "()");
//请求的参数
Object[] args = joinPoint.getArgs();
try{
String params = new Gson().toJson(args[0]);
sysLog.setParams(params);
}catch (Exception e){

}
//获取request
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
//设置IP地址
IpUtil ipUtil = new IpUtil();
sysLog.setIp(ipUtil.getIP());
//用户名
String username = "游客";
try {
username = SecurityUtils.getSubject().getSession().getAttribute("currentUser").toString();
}catch (Exception e){
e.printStackTrace();
}
sysLog.setUsername(username);
sysLog.setTime(time);
sysLog.setCreateDate(new Date());
//保存系统日志
sysLogService.sysLogSave(sysLog);
}
}

    2、日志注解

        /**

 * @author XA
* @date 2019/8/31
* * @time 10:29
* @desc:系统日志注解
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLog {

String value() default "";
}

五、上效果图

    

最新评论:
0 2019-09-04 00:23:00
0 2019-09-04 00:22:45
0 2019-09-04 00:22:42