我在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字段来查看生产环境中发送的内容。
答案 0 :(得分: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
希望有所帮助!
答案 1 :(得分:3)
官方回答中没有明确说明,但我必须提供更多选项来获取正确记录的请求/响应。就我而言,我只使用了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作为参考。