2012-05-16 199 views
3

我在Ruby on Rails中使用Savon gem與wsdl WS進行通信。一切工作正常,但我想使用自定義日誌記錄請求XML,即不是Rails或Savon記錄器。我的代碼看起來是這樣的:使用Savon訪問SOAP請求的請求正文(Ruby on Rails)

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爲指定的記錄器。所以如果你不改變日誌級別,你可以使用一個自定義的類似Logger的對象來響應:debug並存儲記錄的內容。

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

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

希望有所幫助!

+0

Thx的答覆,我會嘗試這種方法,並回來! –

+1

工作就像一個魅力!或者無論如何:) 我最終在自己的記錄器中覆蓋了調試,解析了Nokogiri的消息並在我自己的db字段中記錄了相關信息。 Thx幫助rubiii。 –

+0

這很酷謝謝你,但你需要我添加「信息」方法,如「調試」 – ndrx42

2

這在官方回答中沒有明確說明,但我必須包含更多選項才能正確地獲取請求/響應。就我而言,我只是用Rails.logger,而不是我自己的滾動:

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選項,你不會看到實際的請求/響應主體,只有網址和狀態。

我使用Savon 2.7.2作爲參考。

+0

任何方法來設置全局配置中的Savon日誌記錄? (與savon 2一起使用) – Magne