Logback - 格式化 spring ws soap 请求
Logback - formatting spring ws soap requests
这听起来像是一个愚蠢的问题,但我找不到答案,这真的很困扰我。我正在使用 logback 进行日志记录,目前正在使用 spring ws 处理一些 soap 请求。我想要的是在控制台(多行)中将整个 soap 请求记录为格式良好的 xml 。我已经为 "org.springframework.ws" 添加了 "trace" 级别的记录器,我得到的是每个请求恰好一行。
我的logback.xml:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="error">
<appender-ref ref="STDOUT" />
</root>
<logger name="org.springframework.ws" level="trace" />
</configuration>
如何启用此功能?
大多数 SOAP 库,包括 Spring-WS,在发送之前不会格式化消息。换行符、制表符和空格与接收方无关,它节省了一些带宽。
话虽如此,您可能想要添加一个自定义 ClientInterceptor
来拦截每条消息。您应该实施 handleRequest(MessageContext)
and/or handleResponse(MessageContext)
(取决于您是发送还是接收消息)。
要获取原始 XML,请编写如下代码:
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
message.writeTo(baos);
} catch (IOException ioe) {
log.error("Could not intercept payload", ioe);
throw new WebServiceIOException("Could not intercept payload", ioe);
}
final String payload = baos.toString("UTF-8");
SO 上有很多关于格式化 XML 消息的问题和答案,因此留给 reader.
作为练习。
最简单但最方便和最强大的解决方案是创建您自己的 Log4j 附加程序以漂亮地打印您的 XML 消息。它为您提供了强大的配置可能性,而不会膨胀您的网络堆栈:
How to create your own appender using Log4j2
How to pretty print XML
另请查看如何使用 spring loggers 获得更多粒度。
这听起来像是一个愚蠢的问题,但我找不到答案,这真的很困扰我。我正在使用 logback 进行日志记录,目前正在使用 spring ws 处理一些 soap 请求。我想要的是在控制台(多行)中将整个 soap 请求记录为格式良好的 xml 。我已经为 "org.springframework.ws" 添加了 "trace" 级别的记录器,我得到的是每个请求恰好一行。
我的logback.xml:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="error">
<appender-ref ref="STDOUT" />
</root>
<logger name="org.springframework.ws" level="trace" />
</configuration>
如何启用此功能?
大多数 SOAP 库,包括 Spring-WS,在发送之前不会格式化消息。换行符、制表符和空格与接收方无关,它节省了一些带宽。
话虽如此,您可能想要添加一个自定义 ClientInterceptor
来拦截每条消息。您应该实施 handleRequest(MessageContext)
and/or handleResponse(MessageContext)
(取决于您是发送还是接收消息)。
要获取原始 XML,请编写如下代码:
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
message.writeTo(baos);
} catch (IOException ioe) {
log.error("Could not intercept payload", ioe);
throw new WebServiceIOException("Could not intercept payload", ioe);
}
final String payload = baos.toString("UTF-8");
SO 上有很多关于格式化 XML 消息的问题和答案,因此留给 reader.
作为练习。最简单但最方便和最强大的解决方案是创建您自己的 Log4j 附加程序以漂亮地打印您的 XML 消息。它为您提供了强大的配置可能性,而不会膨胀您的网络堆栈:
How to create your own appender using Log4j2
How to pretty print XML
另请查看如何使用 spring loggers 获得更多粒度。