Как я могу сделать Spring WebServices регистрировать все запросы SOAP?
Мне нужны все запросы SOAP, зарегистрированные в CommonLogFormat
(см. http://en.wikipedia.org/wiki/Common_Log_Format), плюс продолжительность (количество времени, которое требуется для обработки запроса).
Какой лучший способ сделать это? Похоже, что можно настроить log4j для Spring WebServices, но будет ли он регистрировать все значения, которые меня интересуют?
http://pijava.wordpress.com/2009/12/04/spring-webservice-soap-requestresponse-logging-with-log4j/
EDIT: мы фактически используем SLF4J
, а не Log4j
. Кроме того, похоже, что это можно сделать, настроив PayloadLoggingInterceptor:
http://static.springsource.org/spring-ws/site/reference/html/server.html#server-endpoint-interceptor
Но я не уверен, куда отправятся сообщения журнала. Я добавил, что перехватчик для наших перехватчиков, и я не вижу сообщений в журнале.
Ответы
Ответ 1
Вы можете использовать это, чтобы регистрировать необработанный paylod входящих и исходящих вызовов веб-сервисов. Я не уверен, как регистрировать, как долго выполнялось сообщение веб-службы.
<!-- Spring Webservice XML -->
<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
Ответ 2
Для 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
Ответ 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).
Во-вторых, Spring -ws использует интерфейс Commons Logging, который является другим простым фасадом, например SLF4J.
Наконец, вы можете использовать нижеследующую настройку, чтобы включить Spring -ws функцию ведения журнала сообщений.
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.logger.org.springframework.ws.server.MessageTracing=DEBUG
- Чтобы зарегистрировать все клиентские сообщения:
log4j.logger.org.springframework.ws.client.MessageTracing=TRACE
На уровне DEBUG
регистрируется только корневой элемент полезной нагрузки
На уровне TRACE
- регистрируется весь контент сообщения
Наконец, для регистрации только отправленных или полученных сообщений используйте .sent
или .received
в конце конфигураций.
ex: log4j.logger.org.springframework.ws.server.MessageTracing.received=DEBUG
регистрирует загруженный на стороне клиента загрузочный корневой элемент
возвращение:
DEBUG WebServiceMessageReceiverHandlerAdapter:114 - Accepting incoming [[email protected]62d9] to [http://localhost:8080/mock-platform/services]
Для более info
Ответ 6
Добавить фильтр сервлета в w760 ws (для перемещения с помощью org.springframework.web.servlet.DispatcherServlet) в web.xml
вы можете найти фильтр здесь
http://www.wetfeetblog.com/servlet-filer-to-log-request-and-response-details-and-payload/431
внутри фильтра вы можете регистрироваться по своему усмотрению