Aop实现操作日志入库管理

1 篇文章 0 订阅
1 篇文章 0 订阅

Aop实现操作日志入库管理

添加依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

自定义日志注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLog {
    String value() default "";
}

日志实体

package com.xj.entity.commen;

import lombok.Getter;
import lombok.Setter;

import java.util.Date;

/**
 * @program:Java_trs
 * @description:系统操作日志
 * @author:尚龙龙
 * @create:2021-03-02-13:39
 **/
@Getter
@Setter
public class SystemLog {

    private Integer id;//编号
    private String ip;//操作者Ip
    private String node;//当前操作节点
    private String userCode;//操作者账号
    private String action;//操作者行为
    private String content;//操作内容描述
    private long operationTime;//操作时长
    private Date createTime;//操作时间
    private Date beginTime; //开始时间
    private Date endTime; //结束时间
    private Integer currenPage;       //当前页
    private Integer currenPageSize;   //当前页数量
}

日志切面

@Around("@annotation(sysLog)")
    public Object around(ProceedingJoinPoint joinPoint, com.xj.annotation.SysLog sysLog) throws Throwable {
        long beginTime = System.currentTimeMillis();
        //执行方法
        Object result = joinPoint.proceed();
        // 执行时长(毫秒)
        long time = System.currentTimeMillis() - beginTime;
        int maxId = systemLogService.selectMaxId();

        SystemLog systemLog = new SystemLog();
        systemLog.setOperationTime(time);
        if(sysLog != null){
            //注解上的描述
            systemLog.setAction(sysLog.value());
        }
        //编号
        systemLog.setId(maxId+1);

        //请求的方法名
        String className = joinPoint.getTarget().getClass().getName();
        String methodName = joinPoint.getSignature().getName();
        systemLog.setNode(className + "." + methodName + "()");
        //请求的参数
        String [] paramNames = ((CodeSignature)joinPoint.getSignature()).getParameterNames();
        Object[] args = joinPoint.getArgs();
        Stream<?> stream = ArrayUtils.isEmpty(args) ? Stream.empty() : Arrays.stream(args);
        List<Object> logArgs = stream
                .filter(arg -> (!(arg instanceof HttpServletRequest) && !(arg instanceof HttpServletResponse)))
                .collect(Collectors.toList());
        String content = "";
        for (int i = 0;i < args.length; i++){
            if (args[i] instanceof MultipartFile){
                content += "[{MultipartFile:'"+MultipartToFile((MultipartFile)args[i]).getName()+"'}";
            }else{
                content += JSON.toJSON(args[i]);
            }
        }
        systemLog.setContent(content);

        systemLog.setContent(content);
//        systemLog.setParams(params);
        //设置IP地址
//        systemLog.setIp(IPHelper.getIpAddr());
        //用户名
        String ip = SecurityUtils.getSubject().getSession().getHost();
        String userCode = SecurityUtils.getSubject().getPrincipals().toString();
        systemLog.setIp(ip);
        systemLog.setUserCode(userCode);
        systemLog.setCreateTime(new Date());
        //保存系统日志
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        logger.info(sdf.format(systemLog.getCreateTime()));
        logger.info(systemLog.getIp()+":"+systemLog.getUserCode()+":"+systemLog.getNode()+":"+systemLog.getAction()+":"+systemLog.getContent());
        systemLogService.save(systemLog);
        return result;
    }

Controller

    @PostMapping("/uploadSampling")
    @ApiOperation(value = "上传布点采样方案文件", notes = "上传布点采样方案文件", httpMethod = "POST")
    @SneakyThrows
    @SysLog("上传布点采样方案文件")
    public ReturnResult uploadSampling(@ApiParam(value = "上传文件",required = true) @RequestParam("fileList") MultipartFile fileList){
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值