[Python] Ein grobes Verständnis des Protokollierungsmoduls

Charakter

image.png

__Logger-Klasse __: Dies ist der Hauptteil der Protokollierung. Verwalten Sie von der Protokollgenerierung bis zum Senden an den gewünschten Speicherort. Handler und Filter können für jedes aus der Logger-Klasse generierte Objekt festgelegt werden. Logger hat eine hierarchische Struktur (später beschrieben) und erbt die übergeordneten Einstellungen durch Vererbung.

__root (rootLogger-Objekt) __: Ein Objekt der Standard-Logger-Klasse und das übergeordnete Objekt aller Logger. Muss einer sein. Alle in logging.info () usw. geschriebenen Protokolle fließen hier.

__Original Logger-Objekt __: Ein Objekt der ursprünglichen Logger-Klasse, das von getLogger (" Logger-Name ") erstellt wurde. Durch Erstellen jeder Datei können Sie explizit sehen, um welche Datei es sich bei dem Protokoll handelt, und Sie können die Protokollstufe und den Handler für jede Datei festlegen. Es ist möglich, eine hierarchische Struktur zu erstellen (später beschrieben).

LogRecord: Protokollkörper. Erstellt von Logger.

Handler: Verwalten, wo LogRecord geliefert wird (Standardausgabe, Dateischreiben, HTTP-Anforderung usw.). In Logger angeben. → Verschiedene Handler: https://docs.python.org/ja/3/howto/logging.html#useful-handlers

Formatter: Geben Sie das Protokollformat an. Geben Sie im Handler an.

Filter: Verwalten Sie, welche Protokolle ausgegeben werden. Geben Sie in Logger oder Handler an.

Logger-Hierarchie

image.png

Protokollierungsfluss

Überprüfen Sie den Protokollierungsfluss mit mod2 und mod2.fuga in der obigen hierarchischen Struktur. https://docs.python.org/ja/3/howto/logging.html#logging-flow

loggingtest.py


import logging
import loggingtest2

logger = logging.getLogger("mod2")
logger.setLevel(logging.DEBUG)

#Formatgenerierung
formatter = logging.Formatter('parent: %(name)s [%(levelname)s] %(message)s')

#Handler-Generierung der Standardfehlerausgabe
handler = logging.StreamHandler()

#Verschiedene Einstellungen zum Handler
handler.setLevel(logging.ERROR)
handler.setFormatter(formatter)

#Schließen Sie einen Handler an den Logger an
logger.addHandler(handler)

if __name__ == "__main__":
    loggingtest2.test()

loggingtest2.py


import logging

def test():
    logger = logging.getLogger("mod2.fuga")
    logger.setLevel(logging.DEBUG)

    #Formatgenerierung
    formatter = logging.Formatter('child: %(name)s [%(levelname)s] %(message)s')

    #Generierung / Einstellung des Handlers
    handler = logging.StreamHandler()
    handler.setLevel(logging.WARNING)
    handler.setFormatter(formatter)

    logger.addHandler(handler)
    #logger.propagate = False  #Siehe unten

    logger.error("bbb")

Wenn es in diesem Zustand ausgeführt wird, wird es sowohl vom übergeordneten als auch vom untergeordneten Handler ausgegeben.

$ python loggingtest.py
child: mod2.fuga [ERROR] bbb
parent: mod2.fuga [ERROR] bbb

image.png

Wie Sie sehen können, wenn Sie die Handlerbedingung von loggingtest2.py auf "CRITICAL" oder höher setzen, wird "child: ~~" nicht ausgegeben. Wenn Sie den Punkt "getLogger ()" entfernen und die hierarchische Struktur reduzieren Es wird nur child: ~~ ausgegeben, da der Handler des übergeordneten mod2 nicht mehr aufgerufen wird.

Attribut verbreiten

Die wörtliche Übersetzung von propagate lautet "propagate", und dieses Attribut gibt an, ob der LogRecord an sein übergeordnetes Element weitergegeben werden soll. Sie können bestätigen, dass das übergeordnete Element nicht aufgerufen wird, indem Sie im obigen Code "logger.propagate = False" auskommentieren.

Einstellungen für die Protokollierung nicht mehr

Die Einstellungen für die Protokollierung können in einer separaten Datei namens "logging.conf" beschrieben und mit "fileConfig ()" gelesen werden. Infolgedessen kann der Teil der Protokollierungseinstellung vom Verarbeitungskörper getrennt werden. Einzelheiten finden Sie im offiziellen Dokument.

Recommended Posts

[Python] Ein grobes Verständnis des Protokollierungsmoduls
[Python] Ein grobes Verständnis von Iterablen, Iteratoren und Generatoren
[Python] Die potenzielle Feldplanung von Python Robotics verstehen
Ein grobes Verständnis von Python-Feuer und ein Memo
Übergeben Sie den Pfad des importierten Python-Moduls
Erstellen Sie ein Beziehungsdiagramm von Python-Modulen
[Python] [Meta] Ist der Python-Typ ein Typ?
Die Geschichte der Verarbeitung A von Blackjack (Python)
Memorandum des Python-Paketverwaltungstools ez_setup
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Erstellen Sie ein Kompatibilitätsbewertungsprogramm mit dem Zufallsmodul von Python.
Wenn Sie einen Singleton in Python möchten, stellen Sie sich das Modul als Singleton vor
Erstellen Sie ein Python-Modul
Holen Sie sich den Aufrufer einer Funktion in Python
der Zen von Python
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Ausgabe in Form eines Python-Arrays
Versuchen Sie es mit dem Sammlungsmodul (ChainMap) von python3
Berücksichtigung der Stärken und Schwächen von Python
[Python] Ein Programm, das die Anzahl der Täler zählt
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
[Python] Ruft die Liste der im Modul definierten Klassen ab
Python-Implementierung der Bayes'schen linearen Regressionsklasse
Python zeigt aus der Perspektive eines C-Sprachprogrammierers
Verwenden wir die Python-Version des Confluence-API-Moduls.
Aufgaben zu Beginn eines neuen Python-Projekts
Ein Memorandum über die Umsetzung von Empfehlungen in Python
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Auf dem Weg zum Ruhestand von Python2
Python - Schneller Start der Protokollierung
Über das Python-Modul venv
Automatisches Update des Python-Moduls
Über die Funktionen von Python
Vollständiges Verständnis des Python-Debuggens
Die Kraft der Pandas: Python
Ein Hinweis auf Missverständnisse beim Versuch, das gesamte selbst erstellte Modul mit Python3 zu laden
Eine einfache Python-Implementierung der k-Neighborhood-Methode (k-NN)
Erleichtern Sie die Anzeige von Python-Modulausnahmen
Mindestkenntnisse, um mit dem Python-Protokollierungsmodul zu beginnen
Anzeigen mit dem Python-Modul des mobilen Nifty Cloud-Backends
Anders als der Importtyp von Python. Bedeutung von aus A Import B.
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
Was ist die Standard-TLS-Version des Python-Anforderungsmoduls?
Finden Sie die Eigenwerte einer reellen symmetrischen Matrix in Python
26.11.2015 Python> Funktionsliste des Moduls anzeigen> Mathematik importieren> Verzeichnis (Mathematik)
Python-Skript, das den Inhalt zweier Verzeichnisse vergleicht
Testen Sie die Version des Argparse-Moduls
Die Geschichte von Python und die Geschichte von NaN
Eine gute Beschreibung der Python-Dekorateure
[Python] Anmelden Ihres eigenen Moduls
Erster Python 3 ~ Der Beginn der Wiederholung ~
[Python] Ein Memorandum der schönen Suppe4
Eine kurze Zusammenfassung der Python-Sammlung
Existenz aus Sicht von Python
pyenv-change die Python-Version von virtualenv
Eine grobe Zusammenfassung der Geschichte des Betriebssystems