SpringBoot记录访问日志应该写在哪里呢?
问题描述
使用@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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
访问日志建议写到 路由拦截器里面,为什么?因为spring的mvc拦截器,帮你获取到了request参数
当然你要自己写aop切面拦截每个controller方法行不行,其实也行,没什么特别的毛病,在aop切面里面你能记录的东西可能还更多一些,根据自己的需求去做就好了,记录到哪里都是根据需求去的