Python Global Logger

Mehvish Ashiq 21 Juni 2023
  1. Einführung in die Protokollierung und ihre Bedeutung in Python
  2. Verwenden Sie das logging-Modul global in Python
Python Global Logger

Dieses Tutorial stellt die Protokollierung, ihre verschiedenen Ebenen und ihre Bedeutung in Python vor. Dann lernen wir, wie wir das Python-Modul logging global verwenden können.

Einführung in die Protokollierung und ihre Bedeutung in Python

Die Protokollierung ist eine Möglichkeit, Ereignisse zu verfolgen, die während der Ausführung der Software auftreten. Die Softwareentwickler fügen Protokollierungsaufrufe hinzu, um die Fehler und Ereignisse zu protokollieren, die auftreten, wenn jemand das Programm ausführt.

In der Python-Programmierung haben wir ein eingebautes Modul namens logging, das solche Fehler und Ereignisse protokollieren kann. Beachten Sie, dass Ereignisse die Nachricht sind und optional Daten enthalten können, die für ein Ereignis spezifisch sind.

Diese Ereignisse können unterschiedliche Ebenen/Schweregrade haben, die von einem Softwareentwickler zugewiesen werden. Wir können also sagen, dass die Protokollierung ein sehr leistungsfähiges Werkzeug ist, um unsere Anwendung zu debuggen und alle erforderlichen Informationen zu verfolgen.

Das logging-Modul bietet uns verschiedene Methoden für unsere Anwendung, um verschiedene Log-Handler zu konfigurieren, Log-Nachrichten an diese Handler weiterzuleiten und eine hochflexible Konfiguration zu ermöglichen, die bei der Handhabung verschiedener Anwendungsfälle hilft.

Auch das Modul logging hat verschiedene Log-Levels, die uns helfen, mit unterschiedlichen Schweregraden umzugehen. Im Folgenden finden Sie eine kurze Beschreibung der Protokollierungsebenen:

  • INFO - Es bestätigt, dass verschiedene Dinge wie erwartet funktionieren.
  • DEBUG – Bietet detaillierte Informationen, die typisch sind, wenn jemand die Probleme diagnostiziert.
  • WARNUNG - Es ist ein Hinweis darauf, dass etwas Unerwartetes passiert. Wir können auch sagen, dass WARNUNG auf ein Problem hinweist, das in Kürze auftreten kann, z. B. zu wenig Speicherplatz.
  • KRITISCH – Weist auf einen schwerwiegenden Fehler hin, bei dem die Anwendung selbst nicht weiter ausgeführt werden kann.
  • FEHLER - Es stellt ein ernsteres Problem dar, das es dem Programm nicht erlaubt, einen Vorgang oder eine Funktion auszuführen.

Verwenden Sie das logging-Modul global in Python

Wir können das Modul logging lokal und global in Python verwenden. Lokal bedeutet hier, das Modul logging in einem bestimmten Umfang zu verwenden; Beispielsweise importieren wir das Modul logging in die Datei A.py, sodass wir es nur in A.py verwenden können, nicht in der Datei B.py.

Andererseits bedeutet global die Verwendung überall in der Datei A.py und B.py. Es ist wichtig, die Verwendung des logging-Moduls lokal zu verstehen, um Python Global Logger zu lernen.

Beispielcode, der das Modul logging lokal verwendet (gespeichert in der Datei test.py):

import logging

logger = logging.getLogger("test_logger")
logger.setLevel(logging.INFO)


def sum_numbers(number1, number2):
    try:
        output = number1 + number2
    except TypeError:
        logger.exception("Oh! TypeError Occurred")
    else:
        return output


result = sum_numbers(10, "Mehvish")

Hier verwenden wir das Modul logging lokal in der Datei test.py, die wir importiert haben.

Dann verwenden wir getLogger(), um mit dem Logging mit dem logging-Modul in Python zu beginnen. Dazu wird die Factory-Funktion logging.getLogger(name) ausgeführt.

getLogger() nimmt ein Argument, das der Name eines Loggers ist, und gibt die Referenz auf die Logger-Instanz (Objekt des Loggers) mit dem Namen zurück, falls angegeben, oder root, wenn nicht.

Beachten Sie, dass mehrere Aufrufe von getLogger() mit dem genauen Namen die Referenz auf dieselbe Logger-Instanz zurückgeben, was nützlich ist, um sie global zu verwenden (wir werden das gleich sehen).

Als nächstes verwenden wir die Methode setLevel(), um die Protokollierungsstufe festzulegen, und schreiben die Funktion sum_numbers(), die zwei Zahlen vom Typ int nimmt, sie addiert und das Ergebnis zurückgibt, wenn die richtigen Werte angegeben sind; Andernfalls wird TypeError generiert.

Schließlich rufen wir sum_numbers() auf, um unser logging-Modul in Aktion zu sehen, indem wir die folgenden Ergebnisse erzeugen.

AUSGANG:

Oh! TypeError Occurred
Traceback (most recent call last):
  File "E:\Code\use_logging_locally\test.py", line 8, in sum
    output = number1 + number2
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Die Verwendung des logging-Moduls ist sehr einfach, aber wie kann man global von diesem Modul profitieren? Lassen Sie uns das unten lernen.

Beispielcode (gespeichert in der Datei log.py):

import logging


def set_custom_logger(name):
    formatter = logging.Formatter(
        fmt="%(asctime)s - %(levelname)s - %(module)s - %(message)s"
    )

    handler = logging.StreamHandler()
    handler.setFormatter(formatter)

    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
    logger.addHandler(handler)
    return logger

Beispielcode (gespeichert in der Datei submodule.py):

import logging

logger = logging.getLogger("root")
logger.debug("submodule message")

Beispielcode (gespeichert in der Datei main.py):

import submodule
import log

logger = log.setup_custom_logger("root")
logger.debug("main message")

AUSGANG:

2022-10-27 09:31:02,447 - DEBUG - main - main message
2022-10-27 09:31:02,450 - DEBUG - submodule - submodule message

Dieses Codebeispiel gibt Datum, Uhrzeit, Protokollebene, Modulname und Nachricht aus. Beachten Sie, dass wir logging.getLogger() in submodule.py verwendet haben, um genau die Logger-Instanz zu verwenden, die wir in der Datei log.py verwendet haben.

Wie? logging.getLogger(name) wird normalerweise ausgeführt, um mit der Protokollierung mithilfe des logging-Moduls in Python zu beginnen. Der getLogger() akzeptiert ein Argument, den Namen des Loggers.

Durch die Verwendung der Funktion getLogger() erhalten wir eine Referenz auf die Logger-Instanz mit dem angegebenen Namen, falls angegeben, oder root, falls nicht angegeben.

Mehrere Aufrufe von getLogger() mit dem genauen Namen geben den Verweis auf das genaue Logger-Objekt zurück, was uns hilft, es global zu verwenden.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - Python Logging