SpringBoot记录访问日志应该写在哪里呢?

发布于 2022-09-12 23:23:03 字数 1309 浏览 14 评论 0

问题描述

使用@Around记录日志,发现异常无法被全局异常@ControllerAdvice捕获了

问题出现的环境背景及自己尝试过哪些方法

SpringBoot项目,由于全局异常无法捕获,所以目前的解决方案是在@Around异常捕捉后再抛出一个异常,此时就可以被全局异常类捕获了,但是觉得这样做不太好。

相关代码

@Around("logPointCut()")
    public Object around(ProceedingJoinPoint point) {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
                .getRequest();
        Object result = null;
        long execute;
        try {
            startTime.set(System.currentTimeMillis());
            result = point.proceed();
            // 保存请求日志
            execute = System.currentTimeMillis() - startTime.get();
            saveRequestLog(request, execute);
        } catch (Exception e) {
            saveExceptionLog(request, e.getMessage());
            // AOP无法被全局异常捕获,重新抛出异常可被捕获
            throw new RuntimeException(e.getMessage(),e.getCause());
        } catch (Throwable throwable) {
            saveExceptionLog(request, throwable.getMessage());
            throw new RuntimeException(throwable.getMessage(),throwable.getCause());
        }
        return result;
    }

你期待的结果是什么?实际看到的错误信息又是什么?

过滤器Filter,Intercepter、自定义AOP都可以记日志,但这些日志有何区别,实际开发中,到底应该把记录日志的逻辑放到那里呢?

想看看大家记录访问日志都放在哪里,帮我排一排坑。谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

坐在坟头思考人生 2022-09-19 23:23:03

访问日志建议写到 路由拦截器里面,为什么?因为spring的mvc拦截器,帮你获取到了request参数
当然你要自己写aop切面拦截每个controller方法行不行,其实也行,没什么特别的毛病,在aop切面里面你能记录的东西可能还更多一些,根据自己的需求去做就好了,记录到哪里都是根据需求去的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文