【问题标题】:Twisted: how to silence certain log messages?Twisted:如何使某些日志消息静音?
【发布时间】:2011-11-13 05:30:34
【问题描述】:

我的应用程序中有 XML-RPC 方法,它们会生成大量像这样的 Twisted 日志消息,这些消息又通过 Python 的 logging 模块记录:

2011-09-08 18:00:51.399553 UTC INFO XXX.XXX.XXX.XXX - - [08/Sep/2011:18:00:50 +0000] "POST /RPC2 HTTP/1.0" 200 129 "-" "xmlrpclib.py/1.0.1 (by www.pythonware.com)"

这些日志消息对我来说不是必需的,我想将它们更改为级别 logging.DEBUG 或完全禁止它们。支持吗?

编辑:这些是服务器端日志消息,当我调用twisted.web.xmlrpc.XMLRPC 对象的方法时会记录下来。这些对象在twisted.web.server.Sitetwisted.web.vhost.NameVirtualHost 对象下的层次结构中使用(如putChild),我使用默认的SelectReactor。我想这些类或请求对象中的任何一个都可能是实际记录这些类的对象。

【问题讨论】:

    标签: python logging twisted


    【解决方案1】:

    twisted.web.xmlrpc.Proxy 使用工厂设置其 HTTP 连接(以通常的方式)。工厂 Twisted 的 noisy 属性提供控制它们是否记录启动和停止消息。您可以像这样更改Proxy 的工厂的noisy 属性:

    from sys import stdout
    
    from twisted.web.xmlrpc import Proxy
    from twisted.internet import reactor
    from twisted.python.log import startLogging
    
    startLogging(stdout)
    
    p = Proxy('http://localhost:8080/RPC2')
    class QuietQueryFactory(p.queryFactory):
        noisy = False
    
    p.queryFactory = QuietQueryFactory
    p.callRemote('echo', 'foo')
    
    reactor.run()
    

    比较noisy设置为True时程序的输出。

    对于 XML-RPC 服务器,日志消息来自托管 XML-RPC 资源的twisted.web.server.SiteSite 初始化器接受 logPath 参数;如果您为此参数传递路径,则请求日志将写入该路径而不是主日志。您还可以覆盖发出这些日志消息的 Site.log 方法,以仅忽略您想要忽略的消息,或者不执行任何操作来完全禁用请求日志。

    【讨论】:

    • 我应该指定这些我想要静默的日志消息在服务器端。道歉。无论如何+1,因为这很有用。是否可以为twisted.web.xmlrpc.XMLRPC 对象设置类似的选项?我正在搜索 10.2 代码,但没有找到任何东西。
    • 糟糕。如果我更仔细地阅读了这个问题,我可能会注意到您的示例日志消息是服务器端请求日志消息,而不是客户端工厂启动/停止消息。更新了关于服务器的答案。
    • 酷。在父类twisted.web.http.HTTPFactory中找到log方法定义。
    • (非常相似的案例,希望对您有所帮助)与twisted.web.jsonrpc 使用p.factoryClass 而不是p.queryFactory 具有相同的成功效果。
    猜你喜欢
    • 1970-01-01
    • 2018-06-14
    • 2019-01-28
    • 2019-02-08
    • 2015-10-02
    • 2013-02-03
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    相关资源
    最近更新 更多