[SPRING] 스프링 웹 서비스가 모든 SOAP 요청을 기록하게하려면 어떻게해야합니까?
SPRING스프링 웹 서비스가 모든 SOAP 요청을 기록하게하려면 어떻게해야합니까?
CommonLogFormat (http://en.wikipedia.org/wiki/Common_Log_Format 참조)에 기록 된 모든 SOAP 요청과 지속 시간 (요청을 처리하는 데 걸리는 시간)이 필요합니다.
이 작업을 수행하는 가장 좋은 방법은 무엇입니까? Spring WebServices 용 log4j를 구성 할 수있는 것처럼 보이지만 관심있는 모든 값을 기록 할 것인가? http://pijava.wordpress.com/2009/12/04/spring-webservice-soap-requestresponse-logging-with-log4j/
편집 : 우리는 실제로 Log4j 아니라 SLF4J 사용하고 있습니다. 또한 PayloadLoggingInterceptor를 구성하여이 작업을 수행 할 수있는 것처럼 보입니다. http://static.springsource.org/spring-ws/site/reference/html/server.html#server-endpoint-interceptor
그러나 로그 메시지의 위치를 알 수는 없습니다. 그 인터셉터를 인터셉터에 추가했는데 로그 메시지가 보이지 않습니다.
해결법
-
==============================
1.Spring 부팅 프로젝트의 경우 아래 application.properties 파일을 추가하면 저에게 효과적입니다.
Spring 부팅 프로젝트의 경우 아래 application.properties 파일을 추가하면 저에게 효과적입니다.
logging.level.org.springframework.web=DEBUG 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
-
==============================
2.들어오고 나가는 웹 서비스 호출의 원시 페이로드를 로깅하는 데 사용할 수 있습니다. 웹 서비스 통신 도구의 시간을 기록하는 방법을 잘 모르겠습니다.
들어오고 나가는 웹 서비스 호출의 원시 페이로드를 로깅하는 데 사용할 수 있습니다. 웹 서비스 통신 도구의 시간을 기록하는 방법을 잘 모르겠습니다.
<!-- Spring Web Service Payload Logging--> <logger name="org.springframework.ws.client.MessageTracing"> <level value="TRACE"/> </logger> <logger name="org.springframework.ws.server.MessageTracing"> <level value="TRACE"/> </logger>
추가 세부 정보는 http://static.springsource.org/spring-ws/site/reference/html/common.html#logging에서 확인할 수 있습니다.
-
==============================
3.이것은 나를 위해 일했다. 보낸 요청 메시지와 수신 된 응답을 기록합니다. 로그에서 취한 총 시간을 계산할 수 있습니다.
이것은 나를 위해 일했다. 보낸 요청 메시지와 수신 된 응답을 기록합니다. 로그에서 취한 총 시간을 계산할 수 있습니다.
log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE
-
==============================
4.첫째, SLF4J는 단순한 외관입니다. 즉, 여전히 로깅 프레임 워크가 필요합니다 (예 : java.util.logging, logback, log4j).
첫째, SLF4J는 단순한 외관입니다. 즉, 여전히 로깅 프레임 워크가 필요합니다 (예 : java.util.logging, logback, log4j).
둘째, Spring-ws는 SLF4J와 같은 또 다른 간단한 외관 인 Commons Logging 인터페이스를 사용한다.
마지막으로, 아래 설정을 사용하여 Spring-w 메시지 로깅 기능을 활성화 할 수 있습니다.
log4j.logger.org.springframework.ws.client.MessageTracing.sent=DEBUG log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE log4j.logger.org.springframework.ws.server.MessageTracing.sent=DEBUG log4j.logger.org.springframework.ws.server.MessageTracing.received=TRACE
-
==============================
5.log4j.properties 파일에 다음을 포함 시키십시오 ...
log4j.properties 파일에 다음을 포함 시키십시오 ...
DEBUG 레벨에서 페이로드 루트 요소 만 기록됩니다.
TRACE 레벨에서 전체 메시지 내용이 기록됩니다.
마지막으로 보내거나받은 메시지 만 기록하려면 구성 끝에 .sent 또는 .received를 사용하십시오.
예 : log4j.logger.org.springframework.ws.server.MessageTracing.received = DEBUG 클라이언트 측 수신 마사지 페이로드 루트 요소를 기록합니다. 돌아 오는 길 :
DEBUG WebServiceMessageReceiverHandlerAdapter:114 - Accepting incoming [org.springframework.ws.transport.http.HttpServletConnection@51ad62d9] to [http://localhost:8080/mock-platform/services]
더 많은 정보를 위해서
-
==============================
6.독자적인 로깅 시스템을 가지고 있다면 SOAP 메시지를 로깅하는 대신 다음 인터셉터를 사용할 수 있습니다.
독자적인 로깅 시스템을 가지고 있다면 SOAP 메시지를 로깅하는 대신 다음 인터셉터를 사용할 수 있습니다.
setInterceptors(new ClientInterceptor[]{new ClientInterceptor() { @Override public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException { System.out.println("### SOAP RESPONSE ###"); try { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); messageContext.getResponse().writeTo(buffer); String payload = buffer.toString(java.nio.charset.StandardCharsets.UTF_8.name()); System.out.println(payload); } catch (IOException e) { throw new WebServiceClientException("Can not write the SOAP response into the out stream", e) { private static final long serialVersionUID = -7118480620416458069L; }; } return true; } @Override public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException { System.out.println("### SOAP REQUEST ###"); try { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); messageContext.getRequest().writeTo(buffer); String payload = buffer.toString(java.nio.charset.StandardCharsets.UTF_8.name()); System.out.println(payload); } catch (IOException e) { throw new WebServiceClientException("Can not write the SOAP request into the out stream", e) { private static final long serialVersionUID = -7118480620416458069L; }; } return true; } @Override public boolean handleFault(MessageContext messageContext) throws WebServiceClientException { System.out.println("### SOAP FAULT ###"); try { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); messageContext.getResponse().writeTo(buffer); String payload = buffer.toString(java.nio.charset.StandardCharsets.UTF_8.name()); System.out.println(payload); } catch (IOException e) { throw new WebServiceClientException("Can not write the SOAP fault into the out stream", e) { private static final long serialVersionUID = 3538336091916808141L; }; } return true; } }});
각 핸들 메소드에서 페이로드를 사용하여 원시 비누 메시지를 쉽게 얻을 수 있습니다.
-
==============================
7.web.xml에서 스프링 ws (org.springframework.web.servlet.DispatcherServlet으로 이동)에 서블릿 필터를 추가하십시오.
web.xml에서 스프링 ws (org.springframework.web.servlet.DispatcherServlet으로 이동)에 서블릿 필터를 추가하십시오.
여기에서 필터를 찾을 수 있습니다. http://www.wetfeetblog.com/servlet-filer-to-log-request-and-response-details-and-payload/431
필터 안에 원하는대로 로그 할 수 있습니다.
from https://stackoverflow.com/questions/7109251/how-can-i-make-spring-webservices-log-all-soap-requests by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @PostConstruct 메서드는 Spring에서 호출되지 않습니다. (0) | 2019.01.03 |
---|---|
[SPRING] Spring 보안에서 'anonymousUser'가 인증되는 이유는 무엇입니까? (0) | 2019.01.03 |
[SPRING] JPA : 특정 필드 만 업데이트 (0) | 2019.01.03 |
[SPRING] Tomcat 봄 부팅 응용 프로그램 속성을 읽지 못함 (0) | 2019.01.03 |
[SPRING] Spring Rest POST Json RequestBody 지원되지 않는 콘텐츠 유형 (0) | 2019.01.03 |