a1299021 2019-08-26 14:38 采纳率: 0%
浏览 223
已结题

已有用户的实体类对象,请问怎么实现使用Mybatis打印:哪个用户在什么时候执行了什么sql 这样的日志格式?

根据网上资料我写了一个mybatis拦截器如下:

@Override
    public Object intercept(Invocation invocation) throws Throwable {

        if (log.isInfoEnabled()) {
            log.info("进入 LogUtil 拦截器...");
        }

        long startTime = System.currentTimeMillis();
        MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
        Object parameter = null;
        if (invocation.getArgs().length > 1) {
            parameter = invocation.getArgs()[1];
        }

        BoundSql boundSql = mappedStatement.getBoundSql(parameter);

        Configuration configuration = mappedStatement.getConfiguration();
        Object returnVal = invocation.proceed();

        // 获取sql语句
        String sql = getSql(configuration, boundSql);
        String params = getParams(configuration, boundSql);
        String oldSql = boundSql.getSql().replaceAll("[\\s]+", " ");

        printLog(returnVal, null);

        log.info("用户ID:12345" + "," + "打印时间:" + sdf.format(new Date()) + "," + "调用方法:" + mappedStatement.getId() + ","
                + "原始sql:" + oldSql + "," + "完整SQL:" + sql + "," + "参数:" + params + "," + "查询结果" + returnVal.toString()
                + "," + "执行时间:" + (System.currentTimeMillis() - startTime) + "毫秒");

        return returnVal;
    }

由于拦截器打印sql需要自动执行在intercept方法中且此方法是重写的,我在外面的方法中可以获取到用户信息要怎么传入intercept方法中?
外部获取

  public void save(AddDemoReqBO addDemoReqBO)

其中addDemoReqBO对象中包含了用户的信息,请问我怎么把这个对象传入拦截器中,或者有什么其他的方式可以实现打印出:谁在什么时候执行了什么sql 这样的日志?

  • 写回答

4条回答 默认 最新

  • renkai721 2019-08-26 15:04
    关注

    最简单的方法,你的用户应该在session中,这里可以直接拿到session对象,后面的自己处理。

    
    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = attributes.getRequest();
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题