2010-03-22 13 views
22

Ich habe ein Projekt, in dem ich Twisted für meinen Webserver verwende. Wenn Ausnahmen auftreten (z. B. Netzwerkfehler), wird auf der Konsole gedruckt.Wie macht Twisted die Python-Protokollierung?

Ich habe bereits Protokollierung durch Python-Protokoll-Modul - Gibt es eine Möglichkeit, dem Reaktor zu sagen, dass stattdessen verwenden?

Was ist das übliche Muster dafür?

Antwort

23

Es gefunden. Es ist eigentlich ganz einfach:

from twisted.python import log 
observer = log.PythonLoggingObserver(loggerName='logname') 
observer.start() 

Sie nur loggerName auf den gleichen Logger Name festgelegt, die Sie in logging.getLogger verwenden().

+2

Beachten Sie, dass Sie nicht den gleichen loggerName verwenden müssen. Die Verwendung eines anderen kann dabei helfen, zu unterscheiden, woher Logmeldungen kommen und entspricht der Verwendung verschiedener Logger in verschiedenen Teilen Ihrer Anwendung. –

+0

Das ist eine gute Idee. Was hilft auch, dass ich den Namen des Threads in das Protokollnachrichtenformat einbeziehe. Das hilft beim Herausfinden, woher die Stämme kommen. – Dave

+1

Nur zum ersten Mal das Python-Logging-Modul kann blockieren und verdreht erwartet dies nicht. Besser ist es, einen Kundenhandler in Python zu schreiben, der Ereignisse an twisted sendet. Auf diese Weise Sie Zeit Python Locking Protokollierung zu nonblocking ein –

0

Sie können twisted.python.log verwenden. Zum Beispiel:

from twisted.python import log 
log.msg('Hello, world.') 
+1

Das funktioniert, aber nur für Ihre eigenen Protokollnachrichten, nicht die, die von twisted und seinen Modulen generiert werden. – fiorix