Configurer la journalisation vers Syslog en Python
-
Journaliser les messages dans
syslog
à l’aide du modulesyslog
en Python -
Journaliser les messages dans
Syslog
à l’aide du modulelogging
en Python
Le protocole de journalisation système ou Syslog
est un logiciel pour les systèmes d’exploitation basés sur Unix tels que macOS et Linux qui est une norme pour la journalisation des messages.
Syslog
est un protocole de journalisation standard basé sur le réseau qui nous permet d’envoyer des journaux système et des messages d’événements à un serveur, connu sous le nom de serveur Syslog
. Ce service collecte les messages de journal et les messages d’événement de plusieurs machines indépendantes différentes en un seul endroit à des fins d’analyse, de surveillance et d’évaluation.
Comprenons ce service à l’aide d’un exemple.
Supposons que vous ayez cinq ordinateurs. L’un de ces cinq ordinateurs est un serveur Syslog
. Les quatre autres ordinateurs sont des serveurs qui hébergent quatre applications Web. Ces quatre applications Web sont indépendantes les unes des autres et génèrent des messages de journal.
Ces messages de journal incluent des détails sur les utilisateurs qui se sont connectés, les utilisateurs qui se sont déconnectés, quelle page a été consultée par quel utilisateur, quelle erreur a été trouvée sur quelle page, combien de fois une page spécifique a été consultée au cours de la dernière heure, combien de transactions en ligne a eu lieu dans la dernière heure, et ainsi de suite.
Comme il y a tellement d’applications et de messages de journal, sauter sur des ordinateurs individuels et les examiner est une tâche complexe car le nombre d’applications peut être encore plus élevé. Ainsi, toutes ces applications enregistrent leurs messages sur le cinquième ordinateur ou le serveur Syslog
.
Supposons que quelqu’un souhaite consulter et surveiller ces messages de journal à partir de plusieurs applications. Dans ce cas, ils peuvent le faire à partir d’un seul endroit.
Cette stratégie rend non seulement la révision plus facile, mais aussi efficace et productive. On peut même développer des applications pour examiner et surveiller ces messages de journal en fonction de leurs goûts et de leurs exigences ou utiliser des produits existants disponibles sur le marché.
Le langage de programmation Python est un langage universel qui peut créer des applications du monde réel. Cet article abordera la journalisation des messages dans Syslog
à l’aide de Python.
Journaliser les messages dans syslog
à l’aide du module syslog
en Python
Nous pouvons enregistrer des messages à l’aide d’un module Python, syslog
. Il fait partie de la bibliothèque standard Python et agit comme une interface pour les routines de la bibliothèque Unix syslog
.
Ce module possède deux méthodes portant le même nom, syslog()
, qui peuvent enregistrer des messages. Ici, le concept de surcharge de fonctions est utilisé.
Voici la signature de fonction pour les deux méthodes.
syslog.syslog(message)
syslog.syslog(priority, message)
La première méthode accepte un message de chaîne et la deuxième méthode prend un message de chaîne avec une priorité. Les deux méthodes envoient un message de chaîne au journal système.
Il y a huit niveaux de priorité disponibles dans ce module qui sont les suivants dans un ordre décroissant.
LOG_EMERG
-syslog.LOG_EMERG
: Utilisé pour les urgences.LOG_ALERT
-syslog.LOG_ALERT
: Utilisé pour les alertes.LOG_CRIT
-syslog.LOG_CRIT
: Utilisé pour les messages critiques.LOG_ERR
-syslog.LOG_ERR
: Utilisé pour les erreurs.LOG_WARNING
-syslog.LOG_WARNING
: Utilisé pour les avertissements.LOG_NOTICE
-syslog.LOG_NOTICE
: Utilisé pour les avis.LOG_INFO
-syslog.LOG_INFO
: Utilisé pour les messages d’information.LOG_DEBUG
-syslog.LOG_DEBUG
: Utilisé pour le débogage des messages.
Nous en avons maintenant terminé avec une introduction concise au module. Comprenons comment utiliser ce module à l’aide d’un exemple. Reportez-vous au code Python suivant pour cela.
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.")
Journaliser les messages dans Syslog
à l’aide du module logging
en Python
Python a encore un autre module, logging
, contenant des méthodes et des classes qui assistent les applications et les bibliothèques avec un système flexible de journalisation des événements.
Ce module fait également partie de la bibliothèque standard Python. Le module logging
offre de nombreuses fonctionnalités et flexibilité pour la journalisation des événements.
Le module logging
a une classe Logger
qui contient l’implémentation de la logique de journalisation proprement dite. Les développeurs et les programmeurs doivent instancier cette classe pour effectuer la journalisation.
Notez que cette classe ne doit jamais être instanciée directement. Il faut utiliser une fonction au niveau du module getLogger()
ou logging.getLogger(name)
pour créer un logger.
Ici, name
est le nom du logger. La classe Logger
a un tas de méthodes telles que propogate()
, setLevel()
, isEnabledFor()
, getEffectiveLevel()
et log()
.
Pour les besoins de cet article, nous nous concentrerons uniquement sur les méthodes suivantes.
debug(msg)
: une méthode pour enregistrer les messages avec le niveauDEBUG
.info(msg)
: une méthode pour enregistrer les messages avec le niveauINFO
.warning(msg)
: Une méthode pour enregistrer les messages avec le niveauWARNING
.error(msg)
: une méthode pour enregistrer les messages avec le niveauERROR
.critical(msg)
: une méthode pour enregistrer les messages de niveauCRITICAL
.log(level, msg)
: une méthode pour enregistrer les messages avec le niveau entier spécifié.exception(msg)
: une méthode pour enregistrer les messages avec le niveauERROR
.addHandler(hdlr)
: une méthode pour ajouter un gestionnaire spécifié au logger.
Cette bibliothèque a les niveaux de journalisation suivants avec leurs valeurs numériques.
CRITICAL
:50
ERROR
:40
WARNING
:30
INFO
:20
DEBUG
:10
NOTSET
:0
Le module de journalisation a une classe Handler
qui est utilisée pour spécifier un emplacement pour les messages de journalisation. Un objet de classe Handler
est ajouté à un logger à l’aide de la méthode addHandler()
décrite ci-dessus.
En dehors de ces deux classes, le module logging
a deux autres classes, à savoir, Formatter
et Filter
. La classe Formatter
est utilisée pour définir la disposition et le format des messages de journal, et la classe Filter
est utilisée pour filtrer les messages de journal.
Pour l’instant, c’est tout ce que nous avons à savoir sur ces fonctionnalités.
Nous en avons maintenant terminé avec une introduction concise au module logging
; laissez-nous comprendre comment utiliser ce module pour enregistrer des messages à l’aide d’un exemple. Reportez-vous au code Python suivant pour cela.
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.")
Le script Python ci-dessus crée d’abord un logger à l’aide de la méthode getLogger()
et fournit le nom Logger
.
Ensuite, il crée un gestionnaire en utilisant la classe SysLogHandler
. Cette classe permet aux développeurs et aux programmeurs d’envoyer des messages de log à un syslog
Unix distant ou local.
Cette classe accepte un paramètre (un des trois paramètres), address
, qui fait référence à la destination des messages du journal. Pour en savoir plus sur cette classe, reportez-vous à la documentation officielle ici.
Ensuite, nous ajoutons ce gestionnaire au logger à l’aide de la méthode addHandler()
. Enfin, en utilisant toutes les méthodes de journalisation décrites ci-dessus, nous journalisons les messages de tous les niveaux et un avec le niveau 250
.
Pour en savoir plus sur le module logging
et le module syslog
, reportez-vous à la documentation officielle ici et ici respectivement.