SpringBoot(9) --全局日志切面处理并且保存请求,返回参数到数据库

文章目录

功能说明

全局日志处理,保存请求参数和返回参数到数据库,并且自定义注解 如下图所示:
在这里插入图片描述

上代码

首先数据库为:

CREATE TABLE `cl_sys_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `username` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '操作者',
  `operation` varchar(25) COLLATE utf8_bin DEFAULT NULL COMMENT '操作',
  `method` varchar(55) COLLATE utf8_bin DEFAULT NULL COMMENT '方法',
  `params` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '请求参数',
  `ip` varchar(10) COLLATE utf8_bin DEFAULT NULL COMMENT 'ip地址',
  `createdate` datetime(5) DEFAULT CURRENT_TIMESTAMP(5) ON UPDATE CURRENT_TIMESTAMP(5) COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

切面aop 代码:

/**
 * @Classname SysLogAspect
 * @Description 日志切面
 * @Date 2020/6/12 14:45
 * @Created by corey
 */
@Aspect
@Component
public class SysLogAspect {
    private static final Logger logger = LoggerFactory.getLogger(SpringAop.class);

    @Autowired
    private ClSysLogService sysLogService;

    //定义切点 @Pointcut
    //在注解的位置切入代码
    @Pointcut("@annotation( com.itcorey.passw.MyLog)")
    public void logPoinCut() {
    }

    //切面 配置通知
    @AfterReturning("logPoinCut()")
    public void saveSysLog(JoinPoint joinPoint) {
        logger.info("-----------切面---------------");
        //保存日志
        ClSysLog sysLog = new ClSysLog();

        //从切面织入点处通过反射机制获取织入点处的方法
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        //获取切入点所在的方法
        Method method = signature.getMethod();

        //获取操作
        MyLog myLog = method.getAnnotation(MyLog.class);
        if (myLog != null) {
            String value = myLog.value();
            sysLog.setOperation(value);//保存获取的操作
        }

        //获取请求的类名
        String className = joinPoint.getTarget().getClass().getName();
        //获取请求的方法名
        String methodName = method.getName();
        sysLog.setMethod(className + "." + methodName);
        //请求的参数
        Object[] args = joinPoint.getArgs();
        //将参数所在的数组转换成json
        String params = Arrays.toString(args);
        String sp = "),";
        String[] split = params.split("sp",1);
        sysLog.setParams(JSON.toJSONString(split));
        //获取用户名
      //  sysLog.setUsername(ShiroUtils.getUserEntity().getUsername());
        //获取用户ip地址
        HttpServletRequest request = HttpContextUtil.getHttpServletRequest();
        sysLog.setIp(IpUtil.getRemortIP(request));

        //调用service保存SysLog实体类到数据库
        sysLogService.saveLog(sysLog);
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot 中配置 MyBatis-Plus 的全局日期返回格式,可以通过配置 MyBatis-Plus 的全局配置类 GlobalConfig 来实现。具体步骤如下: 1. 创建 MyBatis-Plus 的全局配置类 GlobalConfig,通过 setMetaObjectHandler 方法指定自定义的元对象处理器和 setGlobalConfig 方法配置全局日期返回格式,如下所示: ``` import com.baomidou.mybatisplus.core.config.GlobalConfig; import com.baomidou.mybatisplus.extension.handlers.MybatisPlusDefaultMetaObjectHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyBatisPlusConfig { @Bean public GlobalConfig globalConfig() { GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setMetaObjectHandler(new MybatisPlusDefaultMetaObjectHandler()); globalConfig.setSqlInjector(new LogicSqlInjector()); globalConfig.setDbConfig(new GlobalConfig.DbConfig().setLogicDeleteValue("1").setLogicNotDeleteValue("0")); globalConfig.getDbConfig().setDateFormat("yyyy-MM-dd HH:mm:ss"); return globalConfig; } } ``` 其中,MybatisPlusDefaultMetaObjectHandler 是 MyBatis-Plus 提供的默认元对象处理器,可以自动填充创建时间和更新时间;LogicSqlInjector 是 MyBatis-Plus 提供的逻辑删除插件,用于在进行删除操作时,将数据标记为已删除而不是直接删除;DbConfig 用于配置数据库相关设置,如逻辑删除的值等;setDateFormat 方法用于配置全局日期返回格式。 2. 在 application.properties 或 application.yml 中配置 MyBatis-Plus 的 mapper 接口扫描路径,如下所示: ``` mybatis-plus.mapper-locations=classpath*:mapper/**/*.xml ``` 3. 在实体类中使用 @TableField 注解指定日期类型的格式,如下所示: ``` import com.baomidou.mybatisplus.annotation.TableField; import java.time.LocalDateTime; public class User { @TableField(value = "create_time", el = "createTime") private LocalDateTime createTime; // 省略其他字段和方法 } ``` 这样,在使用 MyBatis-Plus 进行查询操作时,会自动将日期格式化成指定的格式返回

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值