我有以下代码:
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?
答案 0 :(得分:70)
SUDS提供了一些方便的方法:
client.last_sent()
client.last_received()
这些应该为您提供所需的一切。我用它们进行错误记录。 Client The API doc应该有您需要的任何额外信息。
答案 1 :(得分:19)
您可以使用MessagePlugin执行此操作(这将适用于已删除last_sent和last_received的较新的Jurko fork)
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()])
答案 2 :(得分:13)
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))
答案 3 :(得分:6)
要仅获取生成的消息,这也有效:
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)
答案 4 :(得分:2)
尝试更改
logging.basicConfig(level=logging.INFO)
到
logging.basicConfig(filename="/tmp/suds.log", level=logging.DEBUG)
答案 5 :(得分:0)
如果您想通过jurko-suds减少日志记录
$focus
答案 6 :(得分:0)
我使用bingads API遇到了这个问题,值得注意的是顺序很重要我必须导入日志记录然后导入suds开始记录然后导入bingads,任何其他顺序并且没有从suds输出日志。
请检查您的导入订单,并移动您的日志记录,这可能会解决您的问题。