2016-07-11 22 views
0

안녕하세요 저는 로깅을 위해 스프링 ws + slf4j를 사용하고 있습니다.SLF4j의 스프링 ws 로깅 문제

return (JAXBElement) getWebServiceTemplate().marshalSendAndReceive(uri, request, webServiceMessage -> { 
      SoapMessage soapMessage = (SoapMessage) webServiceMessage; 
      Marshaller marshaller = getMarshaller(); 
      marshaller.marshal(jaxbElement, soapMessage.getSoapHeader().getResult()); 
     }); 
: 비누 요청을 기록하는 동안 propertiesin 아래 사용 & 응답은

대신 로깅의 요구는 다음 개체를 인쇄 & 응답
logging.level.org.springframework.ws.client.MessageTracing.sent=DEBUG 
logging.level.org.springframework.ws.server.MessageTracing.sent=DEBUG 
logging.level.org.springframework.ws.client.MessageTracing.received=TRACE 
logging.level.org.springframework.ws.server.MessageTracing.received=TRACE 

, 내가 사용하는 웹 서비스를 호출하고

13:13:06.155 [main] DEBUG o.s.ws.client.MessageTracing.sent - Sent request [SaajSoapMessage {http://ws.sample.customer.com/}getCustomerDetails] 
13:13:06.411 [main] DEBUG o.s.w.client.MessageTracing.received - Received response [SaajSoapMessage {http://ws.sample.customer.com/}getCustomerDetailsResponse] for request [SaajSoapMessage {http://ws.sample.customer.com/}getCustomerDetails] 

다음과 같은 방법을있는 application.properties

이유가 무엇인지 모르겠다. & 요청을 인쇄하고있다. 또한 "SoapEnvelopeLoggingInterceptor"또는 "ClientInterceptor"를 사용하여 & 요청을 가로 채려고했지만 아무 것도 트리거되지 않지만 응답 객체가 있습니다.

public class LogbackInterceptor implements ClientInterceptor { 

private static final Logger logger = LoggerFactory.getLogger(LogbackInterceptor.class); 

public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException { 
     logger.debug("Sent request by sample [" + messageContext.getRequest() + "]"); 
     return true; 
} 

public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException { 
     logger.debug("Received response by sample [" + messageContext.getResponse() + "] for request [" + 
          messageContext.getRequest() + "]"); 
     return true; 
} 

@Override 
public boolean handleFault(MessageContext messageContext) throws WebServiceClientException { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public void afterCompletion(MessageContext messageContext, Exception ex) throws WebServiceClientException { 
    // TODO Auto-generated method stub 

} 

} 누군가가이 문제

답변

1
마지막으로

내가 솔루션이 다른 사람을 도움이 될 것입니다 희망을 발견를 해결하기 위해 나에게 도움이 경우

@Component 
public class LoggingInterceptor extends SoapEnvelopeLoggingInterceptor{ 

private static final Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class); 

@Override 
protected void logMessage(String message) { 
    System.out.println("Entered log message"); 
    logger.debug("LoggingInterceptor::logMessage"); 
    logger.debug(message); 
/* Example, here you could be logging to DB or whatever you want */ 
} 
} 

그것은 좋은 것,

우리는 등록해야 " ClientInterceptor "를 사용하지 않으면 Spring이"ClientInterceptor "를 트리거하지 않습니다. 아래 코드는 매력처럼 작동하고 요청을 가로 챌 수 있습니다. & 응답.

WebServiceTemplate webServiceTemplate = getWebServiceTemplate(); 
ClientInterceptor[] interceptors = new ClientInterceptor[1]; 
interceptors[0] = new LogbackInterceptor(); 
webServiceTemplate.setInterceptors(interceptors); 
+0

LogbackInterceptor는 인터페이스입니다. 이 코드는 어떻게 작동합니까? – Ravi