Axis2 使用回日志记录 SOAP 请求和响应将截断为 4000 个字符(字节)



我们正在尝试使用日志和以下配置记录 Axis2 SOAP 日志消息:

<!-- Axis client appender -->
<appender name="AxisLogging" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>NEUTRAL</OnMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>NEUTRAL</OnMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>TRACE</level>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>DENY</OnMismatch>
</filter>
<File>log/axis-client.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<FileNamePattern>log/axis-client.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>5</MaxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS zZ}] %-5level [%mdc{requestsite}] [%mdc{session.id}] "%thread" %msg %ex%n</Pattern>
</layout>
</encoder>
</appender>
<logger name="httpclient.wire.content">
<appender-ref ref="AxisLogging"/>
</logger>

长请求和响应XML的日志消息被截断为4000个字符,并通过多个日志行传播。 有没有办法配置回日志以在一个日志行中记录整个XML?

谢谢!

显然,这是ReaderConfig.java(com.ctc.wstx.api.ReaderConfig.java(的问题,它负责读取(和记录Web服务响应(。正如你在这里看到的:

https://github.com/FasterXML/woodstox/blob/master/src/main/java/com/ctc/wstx/api/ReaderConfig.java

在由com.ctc.wstx.stax.WstxInputFactory在服务器启动时调用的方法createFullDefaults((中,Reader是使用固定缓冲区长度4000构造的。

因此,如果您希望在一行中显示完整的 Axis2 响应 XML 消息,则使用自定义代码进行日志记录是唯一的解决方案。

您确定限制在回调中吗?也许限制在轴 2 中。注意:在本例中,限制在 apache CXF 库中。

回日志中的文本长度限制

这就是我通常记录肥皂消息的方式。不过确实需要一些编程。

String request = stub._getServiceClient().getLastOperationContext().getMessageContext("Out")
.getEnvelope().toString());
String response = stub._getServiceClient().getLastOperationContext().getMessageContext("In")
.getEnvelope().toString());

如果您将这些变量写入日志,那么您应该没有问题。

最新更新