Konfigurieren die Protokollierung in Syslog in Python

Vaibhav Vaibhav 14 April 2022
  1. Protokollieren von Meldungen an syslog mit dem Syslog-Modul in Python
  2. Protokollieren von Meldungen an Syslog mit dem Modul logging in Python
Konfigurieren die Protokollierung in Syslog in Python

System Logging Protocol oder Syslog ist eine Software für Unix-basierte Betriebssysteme wie macOS und Linux, die ein Standard für die Protokollierung von Nachrichten ist.

Syslog ist ein standardmäßiges netzwerkbasiertes Protokollierungsprotokoll, das es uns ermöglicht, Systemprotokolle und Ereignismeldungen an einen Server zu senden, der als Syslog-Server bekannt ist. Dieser Dienst sammelt Protokollmeldungen und Ereignismeldungen von mehreren verschiedenen unabhängigen Computern an einem Ort zur Analyse, Überwachung und Bewertung.

Lassen Sie uns diesen Dienst anhand eines Beispiels verstehen.

Angenommen, Sie haben fünf Computer. Einer dieser fünf Rechner ist ein Syslog-Server. Die anderen vier Computer sind Server, die vier Webanwendungen hosten. Diese vier Webanwendungen sind unabhängig voneinander und generieren einige Protokollmeldungen.

Diese Log-Meldungen enthalten Details über die angemeldeten und abgemeldeten Benutzer, welche Seite von welchem ​​Benutzer aufgerufen wurde, welcher Fehler auf welcher Seite gefunden wurde, wie oft in der letzten Stunde auf eine bestimmte Seite zugegriffen wurde, wie viele Online-Transaktionen fand in der letzten Stunde statt, und so weiter.

Da es so viele Anwendungen und Protokollmeldungen gibt, ist es eine komplexe Aufgabe, auf einzelne Computer zu wechseln und sie zu überprüfen, da die Anzahl der Anwendungen noch größer sein kann. Alle diese Anwendungen protokollieren also ihre Nachrichten auf dem fünften Computer oder dem Syslog-Server.

Angenommen, jemand möchte diese Protokollmeldungen von mehreren Anwendungen überprüfen und überwachen. In diesem Fall können sie das von einem Ort aus tun.

Diese Strategie macht die Überprüfung nicht nur einfacher, sondern auch effizienter und produktiver. Man kann sogar Anwendungen entwickeln, um diese Protokollnachrichten basierend auf ihrem Geschmack und ihren Anforderungen zu überprüfen und zu überwachen, oder vorhandene Produkte verwenden, die auf dem Markt erhältlich sind.

Die Programmiersprache Python ist eine universelle Sprache, mit der reale Anwendungen erstellt werden können. Dieser Artikel befasst sich mit dem Protokollieren von Nachrichten an Syslog mit Python.

Protokollieren von Meldungen an syslog mit dem Syslog-Modul in Python

Wir können Nachrichten mit einem Python-Modul syslog protokollieren. Es ist Teil der Python-Standardbibliothek und fungiert als Schnittstelle für die Unix-Bibliotheksroutinen syslog.

Dieses Modul hat zwei gleichnamige Methoden, syslog(), die Meldungen protokollieren können. Hier wird das Konzept der Funktionsüberladung verwendet.

Es folgt die Funktionssignatur für beide Methoden.

syslog.syslog(message)
syslog.syslog(priority, message)

Die erste Methode akzeptiert eine Zeichenkettennachricht, und die zweite Methode akzeptiert eine Zeichenkettennachricht zusammen mit einer Priorität. Beide Methoden senden eine String-Nachricht an den System-Logger.

In diesem Modul sind acht Prioritätsstufen verfügbar, die wie folgt in einer hohen bis niedrigen Reihenfolge sind.

  • LOG_EMERG - syslog.LOG_EMERG: Wird für Notfälle verwendet.
  • LOG_ALERT - syslog.LOG_ALERT: Wird für Warnungen verwendet.
  • LOG_CRIT - syslog.LOG_CRIT: Wird für kritische Meldungen verwendet.
  • LOG_ERR - syslog.LOG_ERR: Wird für Fehler verwendet.
  • LOG_WARNING - syslog.LOG_WARNING: Wird für Warnungen verwendet.
  • LOG_NOTICE - syslog.LOG_NOTICE: Wird für Benachrichtigungen verwendet.
  • LOG_INFO - syslog.LOG_INFO: Wird für Informationsmeldungen verwendet.
  • LOG_DEBUG - syslog.LOG_DEBUG: Wird zum Debuggen von Meldungen verwendet.

Wir sind jetzt mit einer knappen Einführung in das Modul fertig. Lassen Sie uns anhand eines Beispiels verstehen, wie Sie dieses Modul verwenden. Siehe dazu den folgenden Python-Code.

import syslog

syslog.syslog("A test message.")
syslog.syslog(syslog.LOG_EMERG, "A message with LOG_EMERG priority.")
syslog.syslog(syslog.LOG_ALERT, "A message with LOG_ALERT priority.")
syslog.syslog(syslog.LOG_CRIT, "A message with LOG_CRIT priority.")
syslog.syslog(syslog.LOG_ERR, "A message with LOG_ERR priority.")
syslog.syslog(syslog.LOG_WARNING, "A message with LOG_WARNING priority.")
syslog.syslog(syslog.LOG_NOTICE, "A message with LOG_NOTICE priority.")
syslog.syslog(syslog.LOG_INFO, "A message with LOG_INFO priority.")
syslog.syslog(syslog.LOG_DEBUG, "A message with LOG_DEBUG priority.")
syslog.syslog(syslog.LOG_INFO, "Test message with INFO priority.")

Protokollieren von Meldungen an Syslog mit dem Modul logging in Python

Python hat noch ein weiteres Modul, logging, das Methoden und Klassen enthält, die Anwendungen und Bibliotheken mit einem flexiblen Ereignisprotokollierungssystem unterstützen.

Dieses Modul ist auch Teil der Python-Standardbibliothek. Das Modul Protokollierung bietet viele Funktionen und Flexibilität für die Ereignisprotokollierung.

Das Modul logging hat eine Klasse Logger, die die Implementierung der eigentlichen Logging-Logik enthält. Entwickler und Programmierer müssen diese Klasse instanziieren, um die Protokollierung durchzuführen.

Beachten Sie, dass diese Klasse niemals direkt instanziiert werden sollte. Man muss eine Funktion auf Modulebene getLogger() oder logging.getLogger(name) verwenden, um einen Logger zu erstellen.

Dabei ist name der Name des Loggers. Die Klasse Logger hat eine Reihe von Methoden wie propogate(), setLevel(), isEnabledFor(), getEffectiveLevel() und log().

Für diesen Artikel konzentrieren wir uns nur auf die folgenden Methoden.

  • debug(msg): Eine Methode zum Protokollieren von Meldungen mit dem Level DEBUG.
  • info(msg): Eine Methode zum Protokollieren von Nachrichten mit dem Level INFO.
  • warning(msg): Eine Methode, um Meldungen mit dem Level WARNING zu protokollieren.
  • error(msg): Eine Methode, um Meldungen mit dem Level ERROR zu protokollieren.
  • critical(msg): Eine Methode zum Protokollieren von Nachrichten mit dem Level CRITICAL.
  • log(level, msg): Eine Methode zum Protokollieren von Nachrichten mit dem angegebenen Integer-Level.
  • exception(msg): Eine Methode, um Meldungen mit dem Level ERROR zu protokollieren.
  • addHandler(hdlr): Eine Methode, um einen bestimmten Handler zum Logger hinzuzufügen.

Diese Bibliothek hat die folgenden Protokollierungsebenen zusammen mit ihren numerischen Werten.

  • CRITICAL: 50
  • ERROR: 40
  • WARNING: 30
  • INFO: 20
  • DEBUG: 10
  • NOTSET: 0

Das Protokollierungsmodul hat eine Klasse Handler, die verwendet wird, um einen Speicherort für Protokollmeldungen anzugeben. Ein Objekt der Klasse Handler wird mit Hilfe der oben besprochenen Methode addHandler() zu einem Logger hinzugefügt.

Neben diesen beiden Klassen hat das Modul logging noch zwei weitere Klassen, nämlich Formatter und Filter. Die Klasse Formatter wird verwendet, um das Layout und Format von Protokollmeldungen zu definieren, und die Klasse Filter wird zum Filtern von Protokollmeldungen verwendet.

Im Moment ist das alles, was wir über diese Funktionen wissen müssen.

Jetzt sind wir mit einer knappen Einführung in das logging-Modul fertig; Lassen Sie uns anhand eines Beispiels verstehen, wie dieses Modul zum Protokollieren von Nachrichten verwendet wird. Siehe dazu den folgenden Python-Code.

import logging
from logging.handlers import SysLogHandler

logger = logging.getLogger("Logger")
handler = SysLogHandler(address="/var/run/syslog")
logger.addHandler(handler)
logger.debug("A message with level DEBUG.")
logger.info("A message with level INFO.")
logger.warning("A message with level WARNING.")
logger.error("A message with level ERROR.")
logger.critical("A message with level CRITICAL.")
logger.exception("A message with level ERROR.")
logger.log(250, "A message with level 250 numeric value.")

Das obige Python-Skript erstellt zunächst mit Hilfe der Methode getLogger() einen Logger und vergibt den Namen Logger.

Als nächstes erstellt es einen Handler mit der Klasse SysLogHandler. Diese Klasse ermöglicht es Entwicklern und Programmierern, Protokollmeldungen an ein entferntes oder lokales Unix-syslog zu senden.

Diese Klasse akzeptiert einen Parameter (einen der drei Parameter) Adresse, der sich auf das Ziel der Protokollnachrichten bezieht. Um mehr über diese Klasse im Detail zu erfahren, lesen Sie die offizielle Dokumentation hier.

Dann fügen wir diesen Handler mit Hilfe der Methode addHandler() zum Logger hinzu. Schließlich protokollieren wir unter Verwendung aller oben besprochenen Protokollierungsmethoden Nachrichten aller Ebenen und eine mit der Ebene 250.

Um mehr über das Modul logging und das Modul syslog zu erfahren, lesen Sie die offizielle Dokumentation hier bzw. hier.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.