2012-06-13 13 views
5

Ich schreibe gerade mehrere Python-Module, die einige I/O durchführen.Was sind die Richtlinien für die anpassbare Protokollierung von einem Python-Modul?

Diese Module können direkt von einem anderen Entwickler verwendet oder durch ein einfaches Skript, das ich geschrieben habe, aufgerufen werden, hauptsächlich zu Testzwecken.

Ich habe das Protokollierungsmodul verwendet und einen StreamHandler eingerichtet, um Protokolle auf der Standardfehlerausgabe anzuzeigen, und es funktioniert gut. Ich bin mir jedoch nicht sicher, wie diese Protokolle anpassbar gemacht werden können. Offensichtlich möchte ich nicht, dass diese Protokolle auf die Standardausgabe geschrieben werden, wenn ein Entwickler meine Klassen verwendet. Ich würde gerne eine Wahl treffen, im Idealfall, um ihn seine eigenen Handler hinzufügen zu lassen oder gar keine, wenn er keine Logs will.

Gibt es irgendwelche Richtlinien bezüglich der Python-Protokollierung für diesen Fall? Sollte jede Klasse einen eigenen Logger haben?

Kurz gesagt, wie machst du es, und warum?

Danke.

Antwort

2

Vergewissern Sie sich, dass die Module verwendet werden soll als Bibliotheken hinzufügen keine Handler (außer einem NullHandler Instanz oben- Level Logger der Bibliothek).

Die beste Vorgehensweise ist Logger auf Modulebene zu verwenden,

logger = logging.getLogger(__name__) 

verwenden und, falls erforderlich, mit Kind Logger dieses Logger.

Auf diese Weise werden Ihre Bibliotheksprotokollereignisse der Python-Pakethierarchie zugeordnet, und ein Benutzer Ihrer Bibliotheksmodule kann wählen, ob die Protokollierung verwendet werden soll oder nicht und wie sie mit Handlern konfiguriert wird.

Es ist in Ordnung, Handler in Sachen hinzuzufügen, die als Skripte ausgeführt werden sollen.

Sie können Conventions-APIs verwenden, um Handler zu Ihren Loggern hinzuzufügen, solange Ihre Benutzer steuern können, ob diese APIs aufgerufen werden sollen.

+0

Vielen Dank. Dank Ihrer Ratschläge konnte ich mein Logging-System viel sauberer und anpassungsfähiger machen. – ereOn

1

Es gibt ein sehr gutes Tutorial für Python

auf dem Protokollierungsmodul ist

http://docs.python.org/howto/logging.html

+0

Vielen Dank für das Tutorial. Es ist eine sehr interessante Lektüre. Ich wünschte, ich könnte diese Antwort auch akzeptieren. Upvoting für Fairness. – ereOn

Verwandte Themen