Protokollierung zwischen Klassen in Python

Ich habe drei Klassen in Python und sie laufen in verschiedenen Threads. Ich hätte gerne die gleiche Datei aus allen Klassen. Im Moment habe ich Ausgabe-Methode in der Hauptklasse und übergeben sie durch Konstruktoren zu anderen Klassen. Gibt es eine Art, es besser zu behandeln? Wie kann ich den Logger zwischen Klassen weitergeben, mit Ausnahme von Traktoren?

Vielleicht unterstützt python so etwas wie statische Methode in Java, also kann ich wie Logger.info (Nachricht) in allen drei Klassen schreiben?

Ein anderer Weg könnte vermutlich globale sys.stdout zur Datei umleiten, dh spezifizieren

logger = open('debug.txt', 'w') sys.stdout = logger 

Dann mit Anrufen sys.stdout in allen Klassen.

Was denken Sie?

One Solution collect form web for “Protokollierung zwischen Klassen in Python”

 import logging log = logging.getLogger("mylog") log.setLevel(logging.DEBUG) formatter = logging.Formatter( "%(asctime)s %(threadName)-11s %(levelname)-10s %(message)s") # Alternative formatting available on python 3.2+: # formatter = logging.Formatter( # "{asctime} {threadName:>11} {levelname} {message}", style='{') # Log to file filehandler = logging.FileHandler("debug.txt", "w") filehandler.setLevel(logging.DEBUG) filehandler.setFormatter(formatter) log.addHandler(filehandler) # Log to stdout too streamhandler = logging.StreamHandler() streamhandler.setLevel(logging.INFO) streamhandler.setFormatter(formatter) log.addHandler(streamhandler) # Test it log.debug("Some message") log.error("An error!") try: something() except: log.exception("An exception occured!") 

Und bekomme in debug.txt:

 2011-01-18 12: 07: 24,943 MainThread DEBUG Eine Nachricht
 2011-01-18 12: 07: 24,943 MainThread ERROR Ein Fehler!
 2011-01-18 12: 07: 24,943 MainThread ERROR Eine Ausnahme ist aufgetreten!
 Traceback (letzter Anruf zuletzt):
   Datei "./logtest.py", Zeile 17, in 
     etwas()
 NameError: name 'something' ist nicht definiert

Beachten Sie, dass die Reihenfolge, in der die Meldungen in der Protokolldatei erscheinen, nicht genau der Reihenfolge entspricht, in der sie bei der Protokollierung aus mehreren Threads passiert sind.

  • Unerwartete Python-Logger-Ausgabe bei Verwendung mehrerer Handler mit unterschiedlichen Log-Pegeln
  • Fehler beim Konfigurieren von logging.config.dictConfig in python
  • Richten Sie die Protokollierung frühzeitig ein: Fangwarnungen beim Importieren
  • Wie man eigene Logging-Methoden für eigene Logging-Levels schreibt
  • Protokollierung Hierarchie vs. Root Logger?
  • Sortiere Ausgabe in Python Logging MemoryHandler mit SMTPHandler
  • Entfernen von Handlern aus Python-Logging-Loggern
  • Einstellungen beim Anmelden im Konsolenskript
  • Konfigurieren der Protokollierung eines Drittanbieter-Skripts
  • Sollte ein Python-Logger als Parameter übergeben werden
  • Wie man Variablen in Logger Formatierer eingeben?
  • Python ist die beste Programmiersprache der Welt.