Twisted: отключить ведение журнала классов Twisted-framework
Мой Twisted-based клиент отправляет 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-регистрации?
1 ответ
В журнале Twisted все очень наивно. Тем не менее, нет причин, по которым это необходимо, поскольку twisted.python.log
очень интересный и способен на выборочную отчетность, которая вас (и других) интересует.
Событие журнала - это просто словарь произвольных ключей и значений. Наблюдатель по умолчанию знает о словарях с 'message'
ключ. Возможно, из-за этого большинство сообщений журнала, отправляемых самой Twisted, не пытаются ничего делать, кроме как предоставить удобочитаемую строку, связанную с этим ключом (также многие из отправленных сообщений были добавлены до текущей системы регистрации Twisted, и так далее). была более старая, более примитивная система как потребитель).
Не так давно эта проблема беспокоила кого-то, кто был приглашен подать заявку и начать работу над разрешением проблемы, связанной с UDP, в частности. Проблема в основном решена, но кое-что еще предстоит сделать.
Попытка решения состоит в том, чтобы зарегистрировать структурированное сообщение, которое передает ту же информацию, но не имеет сообщения и поэтому не записывается наблюдателем по умолчанию. Это позволяет избежать появления сообщений в журнале по умолчанию, но позволяет наблюдателю, который особенно заинтересован в этих событиях, наблюдать за ними и обрабатывать их по своему усмотрению.
Билет уже давно не тронут. Вероятно, кому-то будет легко подобрать патч и получить последний кусочек пути к его завершению.