Twisted: отключить ведение журнала классов Twisted-framework - PullRequest
3 голосов
/ 11 сентября 2011

Мой 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 Ответ

5 голосов
/ 13 сентября 2011

В журнале Twisted все очень наивно. Тем не менее, нет причины, по которой это необходимо, поскольку twisted.python.log очень полезен и способен выполнять выборочную отчетность, которая вас (и других) интересует.

Событие журнала - это просто словарь произвольных ключей и значений. Наблюдатель по умолчанию знает о словарях с ключом 'message'. Возможно, из-за этого большинство сообщений журнала, испускаемых самим Twisted, не пытаются ничего делать, кроме как предоставить удобочитаемую строку, связанную с этим ключом (также многие из отправленных сообщений были добавлены до текущего Скрученная система журналирования, как и у более старой, более примитивной системы в качестве потребителя.

Не так давно эта проблема беспокоила человека, которому было предложено подать тикет и начать работу над разрешением UDP-части проблемы, в частности . Проблема в основном решена, но кое-что еще предстоит сделать.

Решение, которое было предпринято, заключается в регистрации структурированного сообщения, которое передает ту же информацию, но не имеет сообщения и поэтому не записывается наблюдателем по умолчанию. Это позволяет избежать появления сообщений в журнале по умолчанию, но позволяет наблюдателю, который особенно заинтересован в этих событиях, наблюдать за ними и обрабатывать их по своему усмотрению.

Билет уже давно не тронут. Вероятно, кому-то будет легко подобрать патч и получить последний бит на пути к его завершению.

...