历史潮流浩浩荡荡,顺之者昌,逆之则亡。——孙中山

SpringBoot通用日志解决方案

JAVA 徐 承恩 81℃

金融项目中对于业务较为敏感我们通常需要将用户的操作形成一个结构化的数据并进行持久化。

结构化日志需要的字段:

操作员信息、客户端IP地址、请求地址、控制器名称、控制器方法名称、HTTP请求类型、HTTP请求参数。

问题描述:

在获取请求参数时必然会读取request.getInputStream。由于流只允许读一次,后续读取必然会导致异常。

解决方案:

在SpringBoot框架中给我们提供了一个基于Filter的简单通用日志——CommonsRequestLoggingFilter,这个日志仅仅只实现了日志文件的输出远远达不到我们的设计目标。

通过阅读源码我发现了ContentCachingRequestWrapper这个类能够解决HttpServletRequest inputStream只能读取一次的问题,但是这个类有缺陷(前提必须是doFilter之前不能使用request.getInputStream()方法)。

配置Filter让后续的请求可以正常request.getInputStream

拦截器

注册Filter和拦截器

 

转载请注明:徐叔科技 » SpringBoot通用日志解决方案

喜欢 (0)