5

私はRubyonRailsでSavongemを使用してwsdlWSと通信しています。すべてが正常に機能していますが、RailsやSavonロガーではなく、カスタムログを使用してリクエストXMLをログに記録したいと思います。私のコードは次のようになります。

    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は指定されたロガーへの各要求と応答をログに記録します。: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とステータスのみが表示されます。

参考までにSavon2.7.2を使用しています。

于 2016-06-29T22:16:27.463 に答える