Java中如何记录SOAP错误请求?现有Log4j配置仅适配正常请求
排查SOAP错误请求无日志输出的问题
嘿,我来帮你解决这个SOAP错误请求不记录日志的麻烦!你当前配置的log4j.logger.org.springframework.ws.server.MessageTracing=TRACE只能捕获Spring WS正常处理流程中的请求和响应,但错误请求可能根本没走到这个环节,或者被异常处理逻辑吞掉了。下面是几个实用的排查步骤:
先确认请求是否到达Spring WS处理链
很多时候格式错误的SOAP请求会被Servlet容器(比如Tomcat)或者前置的Spring过滤器拦截,根本没到Spring WS的MessageTracing组件。这时候可以:- 把Servlet容器的日志级别调到DEBUG:
log4j.logger.org.apache.catalina.core=DEBUG(Tomcat为例),看看请求有没有被正常接收并转发到你的SOAP端点。 - 开启Spring DispatcherServlet的DEBUG日志:
log4j.logger.org.springframework.web.servlet.DispatcherServlet=DEBUG,确认请求是否被路由到Spring WS的处理流程中。
- 把Servlet容器的日志级别调到DEBUG:
检查Spring WS的异常处理日志
如果请求到达了端点但处理出错,可能你的异常处理器没有记录请求内容:- 开启端点处理的DEBUG日志:
log4j.logger.org.springframework.ws.server.endpoint=DEBUG,这样端点抛出的异常和请求细节会被自动记录。 - 如果你自定义了
EndpointExceptionResolver,记得在处理异常时手动打印原始请求内容——可以通过WebServiceMessage或者HttpServletRequest的输入流来获取请求体,避免只处理异常返回而漏掉请求日志。
- 开启端点处理的DEBUG日志:
手动添加请求拦截Filter(最稳妥的方法)
要是上面的方法都没效果,直接在请求入口处加一个Filter来强制记录所有请求,不管是否有效:
写一个简单的OncePerRequestFilter实现,用ContentCachingRequestWrapper缓存请求输入流(避免后续处理读不到),然后打印请求内容:@Component public class SoapRequestLoggingFilter extends OncePerRequestFilter { private static final Logger logger = LoggerFactory.getLogger(SoapRequestLoggingFilter.class); @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(request); // 先让请求走后续处理链 filterChain.doFilter(wrappedRequest, response); // 打印缓存的请求体 String requestBody = new String(wrappedRequest.getContentAsByteArray(), wrappedRequest.getCharacterEncoding()); logger.info("Raw SOAP request: {}", requestBody); } }这个Filter会捕获所有到达应用的HTTP请求,不管格式是否正确,能帮你直接看到原始请求内容。
验证log4j配置是否生效
最后再确认下你的log4j配置有没有被覆盖:- 检查
org.springframework.ws.server.MessageTracing的TRACE级别是否正确关联到了Appender(比如Console或File),没有被其他更高优先级的logger配置覆盖。 - 可以临时把
log4j.logger.org.springframework.ws=TRACE加上,扩大Spring WS整个模块的日志范围,看看能不能捕获到更多细节。
- 检查
内容的提问来源于stack exchange,提问作者GC_
相关产品推荐
相关产品推荐

