logging - Axis2 使用 logback 记录 SOAP 请求和响应,截断为 4000 个字符(字节)
问题描述
我们正在尝试使用 logback 和以下配置记录 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 个字符,并通过多个日志行传播。有没有办法配置 logback 以在一个日志行中记录整个 XML?
谢谢!
解决方案
显然这是负责读取(和记录 Web 服务响应)的 ReaderConfig.java (com.ctc.wstx.api.ReaderConfig.java) 的问题。正如你在这里看到的:
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 消息,那么使用自定义代码进行日志记录是唯一的解决方案。
推荐阅读
- tomcat - Tomcat 8 随机挂起,没有任何日志
- sql-server - 无法通过 .net core 3.1 应用程序连接到 MSSQL 数据库
- python - 在保留现有标签的同时进行数据增强
- python - 如何在 Python 中运行 shell 命令?
- tensorflow - 如何使用 tensorflow 数据集训练 sklearn 模型?
- apache-kafka - 当 min.compaction.lag.ms 大于 log.cleaner.max.compaction.lag.ms 时会发生什么?
- typescript - TypeScript:使用没有类型变量的条件类型
- swift - 如何在 swift 中将类自定义初始化程序与协调器一起使用
- linux - 当我从服务器 scp 到名称时,我的文件夹在哪里复制
- mysql - 如何检索相同数据 ID 的最大值