2011-09-11 4 views
3

Mon client Twisted envoie des paquets UDP dans une boucle. Par conséquent j'utilise la classe DatagramProtocol. Ceci est la source:Twisted: désactive la journalisation des classes Twisted-framework

#!/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() 

maintenant quand je lance ce client avec twistd, je reçois en permanence les messages du journal des classes Twisted, à savoir de la DatagramProtocol de classe:

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 

Puisque ces messages journaux sont polluant mes "propres" journaux, je me demande si je peux désactiver ces messages de journal. Comme vous pouvez le voir, j'ai déjà réduit le nombre de journaux en appelant protocol.noisy = False, mais je reçois toujours d'autres messages de journal. Aussi la commande g = protocol.ClientFactory().noisy = False n'aide pas.

Est-il possible de désactiver la journalisation de toutes les classes internes Twisted, de manière générique - pour TOUS les modules? Peut-être en utilisant une configuration Twisted-logging?

+0

connexes: http://stackoverflow.com/q/5078980 – jfs

+0

Merci. Malheureusement, la réponse n'est pas la solution à ce problème. Même lorsque je mets bruyant sur le protocole à faux (voir mon ajout à la question), je reçois toujours des messages de journal. – ifischer

+2

Les messages du journal proviennent de la classe 'twisted.internet.udp.Port', voir [' ._bindSocket() '] (http://twistedmatrix.com/trac/browser/trunk/twisted/internet/udp.py#L99) et ['.connectionLost()'] (http://twistedmatrix.com/trac/browser/trunk/twisted/internet/udp.py#L218) méthodes. Il ne fournit aucune option pour le désactiver. http://twistedmatrix.com/documents/current/core/howto/application.html#auto6 – jfs

Répondre

5

La journalisation de Twisted est très naïve. Cependant, il n'y a aucune raison pour que cela soit le cas, puisque twisted.python.log est très riche en fonctionnalités, et capable du type de rapport sélectif qui vous intéresse (et d'autres).

Un événement de journal est juste un dictionnaire arbitraire clés et valeurs. L'observateur par défaut connaît les dictionnaires avec une clé 'message'. Peut-être pour cette raison, la plupart des messages de log émis par Twisted lui-même n'essaient pas de faire quoi que ce soit sauf fournir une chaîne lisible par l'homme associée à cette clé (aussi, beaucoup de messages ont été ajoutés). et ainsi avait le système plus ancien, plus primitif en tant que consommateur).

Il n'y a pas si longtemps, ce problème dérangeait quelqu'un qui était invité à classer a ticket et à commencer à travailler sur une résolution à the UDP part of the problem en particulier. Le problème est en grande partie résolu, mais il reste quelques choses à faire.

La solution essayée consiste à enregistrer un message structuré qui transmet la même information, mais qui n'a pas de message et qui n'est donc pas enregistré par l'observateur par défaut. Cela évite les messages apparaissant dans le journal par défaut, mais permet à un observateur qui s'intéresse spécifiquement à ces événements de les observer et de les traiter comme vous le souhaitez.

Le billet est resté intact pendant un certain temps maintenant. Il serait probablement facile pour quelqu'un de prendre le correctif et d'obtenir le dernier morceau du chemin à l'achèvement.

Questions connexes