2011-09-11 102 views
3

我的基於Twisted的客戶端在循環中發送UDP數據包。 因此我使用的是DatagramProtocol類。 這是源:扭曲:禁用扭曲框架類的日誌記錄

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
from twisted.application.service import Service 
from twisted.internet import reactor 
from twisted.internet.task import LoopingCall 
from twisted.internet.protocol import DatagramProtocol 
from twisted.python import log 
import logging 

class HeartbeatClient(Service): 
    def __init__(self, host, port, data, beat_period): 
     self.ip = host 
     self.port = int(port) 
     self.data = data 
     self.beat = int(beat_period) 

    def startService(self): 
     self._call = LoopingCall(self._heartbeat) 
     self._call.start(self.beat) 

    def stopService(self): 
     self._call.stop() 

    def _heartbeat(self): 
     protocol = DatagramProtocol() 
     protocol.noisy = False 
     port = reactor.listenUDP(0, protocol) 
     port.write(self.data, (self.ip, self.port)) 
     port.stopListening() 

現在,當我運行這個客戶端twistd來,我永遠得到的扭曲類的日誌信息,即從類DatagramProtocol:

2011-09-11 18:39:25+0200 [-] (Port 55681 Closed) 
2011-09-11 18:39:30+0200 [-] twisted.internet.protocol.DatagramProtocol starting on 44903 
2011-09-11 18:39:30+0200 [-] (Port 44903 Closed) 
2011-09-11 18:39:35+0200 [-] twisted.internet.protocol.DatagramProtocol starting on 50044 
2011-09-11 18:39:35+0200 [-] (Port 50044 Closed) 
2011-09-11 18:39:40+0200 [-] twisted.internet.protocol.DatagramProtocol starting on 37450 

由於這些日誌消息污染我的「自己的」日誌,我不知道我是否可以禁用這些日誌消息。 正如你所看到的,我已經通過調用protocol.noisy = False減少了日誌的數量,但我仍然收到其他日誌消息。同樣命令g = protocol.ClientFactory().noisy = False沒有幫助。

是否有可能以所有模塊的通用方式禁用所有Twisted內部類的日誌記錄?也許通過使用一些Twisted-logging配置?

+0

相關:http://stackoverflow.com/q/5078980 – jfs

+0

謝謝。不幸的是,答案並不是解決這個問題的方法。即使當我將protocol設置爲false時(請參閱我對該問題的補充),我仍會收到Log消息。 – ifischer

+2

日誌消息來自'twisted.internet.udp.Port'類,參見['._bindSocket()'](http://twistedmatrix.com/trac/browser/trunk/twisted/internet/udp.py#L99 )和['.connectionLost()'](http://twistedmatrix.com/trac/browser/trunk/twisted/internet/udp.py#L218)方法。它不提供禁用它的選項。 http://twistedmatrix.com/documents/current/core/howto/application.html#auto6 – jfs

回答

5

扭曲的日誌記錄都非常天真。然而,沒有理由需要這樣,因爲twisted.python.log是非常有用的,並且能夠選擇性地報告您(和其他人)感興趣的那種。

日誌事件只是一個任意字典鍵和值。默認的觀察者知道關鍵字爲'message'的字典。也許正因爲如此,由Twisted發出的大多數日誌消息本身不會嘗試做任何事情,除了提供與此密鑰關聯的人類可讀字符串(另外,許多發出的消息是在扭曲日誌記錄系統之前添加的,因此作爲消費者的是舊的,更原始的系統)。

不久之前,這個問題困擾了一些人,他被提示要求提交文件a ticket,並且特別開始處理the UDP part of the problem的解決方案。這個問題大部分已經解決,但還有一些事情還有待完成。

解決方案嘗試的是記錄傳達相同信息的結構化消息,但沒有消息,因此不被默認觀察者記錄。這避免了默認情況下出現在日誌中的消息,但允許對這些事件特別感興趣的觀察者觀察它們並根據需要處理它們。

這張票現在一直沒有受到影響。對於某人來說,拿起這個補丁並讓它完成的最後一步可能很容易。