Ich arbeite derzeit an Version 1.0.0 pyftpdlib Modul. Diese neue Version wird einige rückwärts inkompatible Änderungen in einführen, dass bestimmte APIs keine Bytes mehr akzeptieren, sondern Unicode. Während ich dabei bin, als Teil dieser Reise, erwog ich die Möglichkeit, meine Protokollfunktionen loszuwerden, die derzeit die Druckanweisung verwenden, und stattdessen das Protokollierungsmodul verwenden.Vorteile der Protokollierung vs. print() + Protokollierung bewährter Methoden
Ab rechten pyftpdlib jetzt Delegierten, die Protokollierung zu 3 Funktionen:
def log(s):
"""Log messages intended for the end user."""
print s
def logline(s):
"""Log commands and responses passing through the command channel."""
print s
def logerror(s):
"""Log traceback outputs occurring in case of errors."""
print >> sys.stderr, s
Der Benutzer bereit Protokolle anpassen (zB schreibt sie in eine Datei) soll nur diese drei Funktionen überschreiben, wie in:
Jetzt frage ich mich: Welche Vorteile würden bedeuten, diesen Ansatz loszuwerden und stattdessen Logging-Modul verwenden? Aus einer Modul-Anbieter-Perspektive, wie genau soll ich Logging-Funktionen in meinem Modul verfügbar machen? Sollte ich dies tun:
import logging
logger = logging.getLogger("pyftpdlib")
... und Staat in meinem doc, dass „Logger“ ist das Objekt, das sollte für den Benutzer verwendet werden, falls will anpassen, wie Protokolle verhalten? Ist es legitim, einen vordefinierten Format ausgegeben bewusst auf wie in:
FORMAT = '[%(asctime)] %(message)s'
logging.basicConfig(format=FORMAT)
logger = logging.getLogger('pyftpdlib')
...?
Können Sie an ein Modul eines Drittanbieters denken? Ich kann Hinweise darauf verwenden, wo die Protokollierungsfunktionalität als Teil der öffentlichen API verfügbar gemacht und konsolidiert wird?
Vielen Dank im Voraus.
Bedeutet das, dass standardmäßig keine Ausgabe produziert wird? In diesem Fall bin ich nicht glücklich damit. –
Dies wird standardmäßig keine Ausgabe erzeugen. "Logging.NullHandler" ist nur in Python 2.7 verfügbar (und> 3.2 glaube ich), was ein Problem sein kann. Wenn Sie nur 'logger = logging.getLogger ('pyftpdlib')' verwenden, erhalten Sie standardmäßig Nachrichten und Sie können Ihre Benutzer einfach auf die 'logging.setLevel'- und' logging.setFormatter'-Dokumentation verweisen, um zu demonstrieren, wie die Ausgabe konfiguriert wird Nachrichten für Ihre Bibliothek. Sie können auch die Dateikonfiguration ['logging.config.fileConfig'] (http://docs.python.org/dev/library/logging.config.html#logging.config.fileConfig) verwenden, um Benutzern die Konfiguration zu ermöglichen Logger – Chris
Um eine Ihrer ursprünglichen Fragen zu beantworten, werden in [PEP 282] (http://www.python.org/dev/peps/pep-0282/) die Vorteile der Protokollierung anstelle von Druckanweisungen kurz erwähnt: * Wenn ein einzelner Protokollierungsmechanismus in der Standardbibliothek enthalten ist, 1) wird die Protokollierung wahrscheinlich "gut" durchgeführt, und 2) mehrere Bibliotheken können in größere Anwendungen integriert werden, die einigermaßen kohärent protokolliert werden können. * – Chris