2012-04-13 10 views
2

Also verwende ich Pythons eingebautes Protokollierungsmodul, um die Protokollierung durchzuführen. Im Allgemeinen mag ich die Art, wie es funktioniert, aber ich frage mich, ob es eine einfache Möglichkeit gibt, Folgendes zu tun:Nur Einträge auf Informationsebene in eine separate Datei protokollieren

Ich möchte Daten in einer Datei und Konsole protokollieren, während mein Skript ausgeführt wird, vorzugsweise mit Logger .Info(). Ich möchte auch Warnungen/Fehler auf der Konsole protokollieren, vorzugsweise mit logger.warning() und logger.error(). Dieser Teil ist einfach. Ich hätte aber auch gerne, wenn die Warnungen/Fehler nicht auch ins Info-Log gegangen wären.

Wenn ich jetzt einen Handler auf der Info-Ebene habe, wird es immer alles auf der Info-Ebene und höher passieren.

Die einzige Lösung, die ich mir vorstellen kann, ist, meine Protokollierung auf zwei separate Logger zu trennen, aber ich möchte das vermeiden.

+0

Obwohl ich, bevor er fragte Suche tat, fand ich eigentlich meine Antwort in dieser Frage: http://stackoverflow.com/questions/1383254/logging-streamhandler-and-standard-streams (Wenn es eine geeignete Möglichkeit gibt, dies zu markieren, Wird mich jemand wissen lassen? Danke!) – MattyP

+0

Fügen Sie Ihre Antwort als Antwort und nicht als Kommentar hinzu und akzeptieren Sie sie dann. –

Antwort

0

Ich glaube, der sauberere Ansatz wäre Logmeldungen unterschiedlich in Handler zu verarbeiten, basierend auf den Ebenen der Protokolldatensätze. LogRecord Objekte haben levelno und levelname Eigenschaften, so haben Sie so ziemlich alles, was Sie benötigen, um logging.error() von logging.warning() und logging.debug() zu unterscheiden.

Weitere Details: http://docs.python.org/library/logging.html#logrecord-objects

+0

bedeutet das, dass ich meinen eigenen Logging-Handler erstellen müsste? – MattyP

+0

@MattyP: Nicht unbedingt. Sie können vorhandene Handler verwenden (einen für jede Protokollierungsmethode) und ihnen verschiedene Filter hinzufügen. Beantworten Sie die Frage, die Sie haben können ("_do muss ich meinen eigenen Filter erstellen? _"): Es kommt darauf an - jede Instanz mit 'filter' Methode wird es tun (http://docs.python.org/library/logging.html#) Filter-Objekte), müssen Sie nur einen geeigneten vorhandenen Filter finden :) – Tadeck

Verwandte Themen