Konfigurieren die Protokollierung in Syslog in Python
-
Protokollieren von Meldungen an
syslog
mit demSyslog
-Modul in Python -
Protokollieren von Meldungen an
Syslog
mit dem Modullogging
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 LevelDEBUG
.info(msg)
: Eine Methode zum Protokollieren von Nachrichten mit dem LevelINFO
.warning(msg)
: Eine Methode, um Meldungen mit dem LevelWARNING
zu protokollieren.error(msg)
: Eine Methode, um Meldungen mit dem LevelERROR
zu protokollieren.critical(msg)
: Eine Methode zum Protokollieren von Nachrichten mit dem LevelCRITICAL
.log(level, msg)
: Eine Methode zum Protokollieren von Nachrichten mit dem angegebenen Integer-Level.exception(msg)
: Eine Methode, um Meldungen mit dem LevelERROR
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.