2015-08-21 5 views
0

Это может показаться глупым вопросом, но я не могу найти ответ, и это действительно беспокоит меня. Я использую logback для ведения журнала, и сейчас я работаю с некоторыми запросами на мыло, используя Spring ws. Я хочу записать весь запрос на мыло в виде красиво отформатированного xml в консоли (несколько строк). Я добавил регистратор для «org.springframework.ws» со словом «trace», и то, что я получил, - это ровно одна строка для каждого запроса.Logback - форматирование весенних мыльных запросов

Мой 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> 

Как включить эту функцию?

ответ

0

Простейшим, но наиболее удобным и мощным решением является создание собственного приложения Log4j для правильной печати вашего XML-сообщения. Он предлагает вам сильные возможности конфигурации без вздутия стек сети:

How to create your own appender using Log4j2

How to pretty print XML

также рассмотрит, как вы можете получить немного больше зернистости с spring loggers.

0

Большинство библиотек SOAP, включая Spring-WS, не форматируют сообщение перед его отправкой. Новые строки, вкладки и пробелы не имеют отношения к принимающей стороне, и это экономит некоторую пропускную способность.

Сказав это, вы можете добавить пользовательский ClientInterceptor, который перехватывает каждое сообщение. Вы должны реализовать handleRequest(MessageContext) и/или 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 сообщений, так что остается в качестве упражнения для читателя.