5

我在 Ruby on Rails 中使用 Savon gem 与 wsdl WS 进行通信。一切正常,但我想使用自定义日志记录请求 XML,即不是 Rails 或 Savon 记录器。我的代码看起来像这样:

    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 字段来查看生产环境中发送的内容。

4

2 回答 2

5

现在没有简单的方法来获取请求 XML。但正如您所注意到的,Savon 将每个请求和响应记录到指定的记录器。因此,如果您不更改日志级别,则可以使用自定义的类似 Logger 的对象来响应:debug并存储记录的内容。

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

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

希望有帮助!

于 2012-05-16T15:12:59.903 回答
4

这在官方答案中没有明确说明,但我必须包含更多选项才能让请求/响应正确记录。就我而言,我只是使用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,您将看不到实际的请求/响应正文,只有 url 和状态。

我使用 Savon 2.7.2 作为参考。

于 2016-06-29T22:16:27.463 回答