2011-09-08 35 views
4

我在我的應用XML-RPC方法產生大量扭曲的日誌信息像這樣的,其又通過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。我想這些類或請求對象中的任何一個都可能是實際記錄這些類的類。

回答

4

twisted.web.xmlrpc.Proxy使用工廠來建立它的HTTP連接(以通常的方式)。 Twisted工廠的noisy屬性提供了是否記錄開始和停止消息的控件。你可以改變Proxy的工廠noisy屬性是這樣的:當noisy設置爲True

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() 

比較的程序的輸出。

對於XML-RPC服務器,日誌消息來自承載XML-RPC資源的twisted.web.server.SiteSite初始值設定項接受一個logPath參數;如果您傳遞此參數的路徑,則請求日誌將被寫入該路徑而不是主日誌。您也可以覆蓋Site.log方法,它是發出這些日誌消息的方法,要麼忽略那些您想省略的方法,要麼完全禁用請求日誌。

+1

我應該指定我想要沉默的這些日誌消息在服務器端。道歉。無論如何,因爲這是有用的+1。是否可以爲'twisted.web.xmlrpc.XMLRPC'對象設置類似的選項?我正在搜索10.2代碼,沒有找到任何東西。 – wberry

+1

糟糕。如果我更仔細地閱讀這個問題,我可能會注意到你的示例日誌消息是服務器端的請求日誌消息,而不是客戶端工廠的啓動/停止消息。更新了關於服務器的答案。 –

+2

很酷。在父類「twisted.web.http.HTTPFactory」中找到'log'方法定義。 'twisted.web.jsonrpc'使用'p.factoryClass'代替'p.queryFactory',並且效果相同,所以我們可以使用 – wberry