扭曲:禁用Twisted的日志记录
我的基于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运行此客户端时,我永久从Twisted类(即类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配置?
Twisted的日志记录都非常天真。 然而,没有理由需要这样做,因为twisted.python.log
非常有用,并且能够提供您(和其他人)感兴趣的选择性报告。
日志事件只是任意键和值的字典。 默认的观察者知道有关'message'
键的字典。 也许正因为如此,Twisted发出的大多数日志消息本身并不会尝试做任何事情,除非提供与此密钥关联的人类可读字符串(另外,许多发出的消息是在当前Twisted日志记录系统之前添加的,所以作为消费者拥有更古老,更原始的系统)。
不久之前,这个问题困扰了一些人,他被要求提交一张票,并开始着手解决UDP问题的一部分。 这个问题大部分已经解决,但还有一些事情还有待完成。
尝试的解决方案是记录传达相同信息的结构化消息,但没有消息,因此不由默认观察者记录。 这避免了默认情况下出现在日志中的消息,但允许对这些事件特别感兴趣的观察者观察它们并根据需要处理它们。
这张票现在一直保持不动。 对于某人来说,拿起这个补丁并让它完成的最后一步可能很容易。
链接地址: http://www.djcxy.com/p/29203.html