2012-05-16 1 views
3

Ruby on Rails에서 Savon gem을 사용하여 wsdl WS와 통신합니다. 모든 것이 정상적으로 작동하지만 레일스 또는 Savon 로거가 아닌 사용자 정의 로그를 사용하여 요청 XML을 로깅하려고합니다. 내 코드는 다음과 같습니다.Savon (Ruby on Rails)을 사용하여 SOAP 요청의 요청 본문에 액세스

response = self.client.request :add_order do 
     soap.body = { 
     :indata => { 
      "CustomerNo" => config[:kundnr], 
      "Pwd" => config[:password], 
      "OrderDate" => order["purchase_order_date"].strftime('%Y%m%d') 
     } 
     } 
    end 

응답 액세스는 문제가되지 않지만 요청은 어떻게됩니까? XML을 DB 필드에 로깅하여 프로덕션 환경에서 보낸 내용을 볼 수 있어야합니다.

답변

5

바로 지금 요청 XML을 쉽게 얻을 수있는 방법이 없습니다. 하지만 눈치 챘을 때 특정 로거에 Savon logs each request and response을 기록했습니다. 따라서 로그 수준을 변경하지 않는 경우 :debug에 응답하는 사용자 정의 로거와 유사한 객체를 사용하고 기록되는 내용을 저장할 수 있습니다.

module DBLogger 
    def self.debug(message) 
    p message # replace with custom impl. 
    end 
end 

Savon.configure do |config| 
    config.logger = DBLogger 
end 

희망 하시겠습니까?

+0

답장을 보내 주신다면 그 방법을 시도하고 돌아올 것입니다! –

+1

매력처럼 일했습니다! 어쨌든 종류 : 나는 내 자신의 로거에서 디버깅을 무시하고, Nokogiri로 메시지를 파싱하고, 내 자신의 db 필드에 관련 정보를 기록했다. 도움 rubiii Thx. –

+0

고맙습니다.하지만 "디버그"와 같은 "정보"방법을 추가해야합니다. – ndrx42

2

이것은 공식 답변에 명시 적으로 언급되지 않았지만 요청/응답을 올바르게 기록하려면 몇 가지 옵션을 추가해야했습니다.

client = Savon.client(
    wsdl: 'http://example.com?wsdl', 
    log: true, 
    logger: Rails.logger, 
    log_level: :debug 
) 

client.call(:example_operation, message: {example: 'example'}) 

log_level 디버그 기본값 수도 있지만, 명시 적 존재에 전혀 해가 없습니다 :) 그러나 log: true 옵션을 사용하지 않고, 당신은 실제를 볼 수 없습니다 : 내 경우에는, 난 그냥 대신 내 자신의 압연의 Rails.logger를 사용 요청/응답 본문, 오직 URL과 상태.

참조 용으로 Savon 2.7.2를 사용하고 있습니다.

+0

전역 설정에서 Savon 로깅을 설정하는 방법은 무엇입니까? (savon 2와 함께 작동) – Magne