私は次のコードを持っています:
from suds.client import Client
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)
SB_PRIVATE_ACCESS = {"PATH":"https://thisurl.com:443/services/",}
client = Client(SB_PRIVATE_ACCESS['PATH'])
print client
しかし、私は500エラーを受け取っています。 SUDを介して生成および受信されているXMLをwsdl開発者に送信しようとしていますが、出力方法がわかりません。私はSUDのドキュメントを探していましたが、それを見つけることができないようです:/送受信された生のxmlを出力する方法を知っている人はいますか?
SUDSには、それを行うための便利なメソッドがいくつか用意されています。
client.last_sent()
client.last_received()
これらは必要なものを提供するはずです。エラーログに使用します。 APIドキュメント クライアントクラスには、必要な追加情報が必要です。
MessagePluginを使用してこれを行うことができます(これは、last_sentとlast_receivedが削除された新しいJurkoフォークで動作します)
from suds.plugin import MessagePlugin
class LogPlugin(MessagePlugin):
def sending(self, context):
print(str(context.envelope))
def received(self, context):
print(str(context.reply))
client = Client("http://localhost/wsdl.wsdl", plugins=[LogPlugin()])
Sudsは、これまでと同様に内部ログをサポートしています。
私はあなたのような情報レベルを設定しています:
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG) # MUST BE THIS?
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)
logging.getLogger('suds.resolver').setLevel(logging.DEBUG)
logging.getLogger('suds.xsd.query').setLevel(logging.DEBUG)
logging.getLogger('suds.xsd.basic').setLevel(logging.DEBUG)
logging.getLogger('suds.binding.marshaller').setLevel(logging.DEBUG)
また、Suds呼び出し(Django、Plone)で使用されているフレームワークに応じて、ルートロガーのログレベルをオーバーライドする必要がある場合もあります。ルートロガーのロギングしきい値が高い場合、ログメッセージが表示されないことがあります(ロガーの階層がどのように進むべきかはわかりません)。以下はオーバーライドする方法の例です。
def enableDebugLog(self):
""" Enable context.plone_log() output from Python scripts """
import sys, logging
logger = logging.getLogger()
logger.root.setLevel(logging.DEBUG)
logger.root.addHandler(logging.StreamHandler(sys.stdout))
生成されたメッセージのみを取得するには、これも機能します。
from suds.client import Client
import sys
SB_PRIVATE_ACCESS = {"PATH":"https://thisurl.com:443/services/",}
client = Client(SB_PRIVATE_ACCESS['PATH'])
client.set_options(nosend=True)
resp = ...<invoke client here>...
sys.stdout.buffer.write(resp.envelope)
変えてみて
logging.basicConfig(level=logging.INFO)
に
logging.basicConfig(filename="/tmp/suds.log", level=logging.DEBUG)
私はbingads APIを使用してこの問題に遭遇しました。順序を記録する必要があることに注意してください.
インポートの順序を確認し、ロギングステートメントを移動すると、問題が解決する場合があります。
Jurko-sudsによるロギングを削減したい場合
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.INFO)
logging.getLogger('suds.transport').setLevel(logging.INFO)
logging.getLogger('suds.xsd.schema').setLevel(logging.INFO)
logging.getLogger('suds.wsdl').setLevel(logging.INFO)
logging.getLogger('suds.resolver').setLevel(logging.INFO)
logging.getLogger('suds.xsd.query').setLevel(logging.INFO)
logging.getLogger('suds.xsd.sxbasic').setLevel(logging.INFO)
logging.getLogger('suds.xsd.sxbase').setLevel(logging.INFO)
logging.getLogger('suds.metrics').setLevel(logging.INFO)
logging.getLogger('suds.binding.marshaller').setLevel(logging.INFO)