AbstractRequestLoggingFilter的afterRequest方法接收message被截断如何解决
问题根因
AbstractRequestLoggingFilter 内置了请求负载的最大长度限制,不同Spring版本默认值通常为50/1024字节,当请求体长度超过该阈值时,类内部生成message参数时就会自动截断,因此你在afterRequest方法拿到的入参本身就已经是被裁剪后的内容。
修复方案
你只需要调整该Filter的maxPayloadLength参数到符合你业务需求的大小即可,根据你的配置方式选择对应操作:
- 如果你使用Java Config注册Filter
@Bean public AbstractRequestLoggingFilter requestLoggingFilter() { // 若你使用官方默认实现类CommonsRequestLoggingFilter,直接初始化该类即可 CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); // 原有配置保持不变,比如是否开启payload、query打印等 filter.setIncludePayload(true); filter.setIncludeQueryString(true); // 重点:设置最大负载长度,以下示例设置为1MB,可按实际需求调整,单位为字节 filter.setMaxPayloadLength(1024 * 1024); return filter; }
如果是你自定义类继承了AbstractRequestLoggingFilter,可以直接在自定义类的构造方法或者初始化逻辑中调用setMaxPayloadLength方法设置阈值。
- 如果你使用XML配置注册Filter
<bean id="requestLoggingFilter" class="org.springframework.web.filter.CommonsRequestLoggingFilter"> <property name="includePayload" value="true"/> <property name="maxPayloadLength" value="1048576"/> <!-- 保留其他原有配置项 --> </bean>
额外排查点
如果调整该参数后仍然存在截断,可依次排查两个位置:
- 存储请求日志的数据库对应字段长度是否足够
- 你使用的消息队列是否有单条消息大小限制
内容的提问来源于stack exchange,提问作者Артур Вартанян
相关产品推荐
相关产品推荐

