Vous êtes sur la page 1sur 5

Abdelhakim Benbouanane

CREATION D’UN LOGGER AVEC


WINSTON :
Introduction :

Un logger, tel que celui proposé par la bibliothèque Winston pour Node.js et React.js, est un outil
essentiel pour enregistrer des informations sur le comportement et le fonctionnement d'une
application. Il permet de capturer des messages de différentes gravités, comme des informations de
débogage, des avertissements ou des erreurs, et de les stocker de manière organisée, souvent dans
des fichiers journaux. Cela offre plusieurs avantages, tels que la capacité à diagnostiquer et à résoudre
rapidement les problèmes, à suivre les performances de l'application et à fournir des données
exploitables pour l'analyse et la surveillance.

Comment l’utiliser ?

Tout d’abord il faut installer le package « Winston » . dans votre terminal, taper la commande
suivante :

Après, il faut créer un fichier « logger.js » dans votre dossier backend :


Ensuite taper le code suivant :

const {createLogger, transports, format} = require("winston");

//---logging function---

const customerLogger = createLogger({


transports: [
new transports.File({
filename: 'customer.log',
level:'info',
format: format.combine(format.timestamp(), format.json())
}),
new transports.File({
filename: 'customer-error.log',
level:'error',
format: format.combine(format.timestamp(), format.json())
})
]
})

module.exports = {customerLogger};

explication du code :

1- const {createLogger, transports, format} = require("winston"); : Cette ligne importe les


modules nécessaires de la bibliothèque Winston.
 createLogger: Cette fonction est utilisée pour créer une instance de logger.
 transports: Ce module fournit des transports pour Winston, qui sont des mécanismes de
stockage pour les journaux, tels que les fichiers, la console, etc.
 format: Ce module fournit des utilitaires pour formater les journaux, tels que l'ajout de
horodatage, la conversion en JSON, etc.

2- const customerLogger = createLogger({ ... }) : Cette ligne crée une instance de logger
personnalisée appelée customerLogger. L'argument de createLogger() est un objet de
configuration qui spécifie les transports et les formats à utiliser.

3- transports: [...] : Cette propriété spécifie les transports à utiliser pour enregistrer les journaux.
Dans cet exemple, deux transports sont définis :
 Un transport de fichier pour enregistrer les journaux d'information dans un fichier nommé
customer.log.
 Un autre transport de fichier pour enregistrer les journaux d'erreur dans un fichier distinct
nommé customer-error.log. Chaque transport est configuré avec un niveau de journalisation
spécifique (level) et un format qui inclut un horodatage et convertit les journaux en format
JSON.
4- module.exports = {customerLogger}; : Cette ligne exporte l'instance du logger
customerLogger afin qu'elle puisse être utilisée dans d'autres modules de l'application. Cela
permet à d'autres parties de l'application d'accéder au logger et de l'utiliser pour enregistrer
des journaux dans les fichiers spécifiés.

Maintenant dans votre fonction ajouter votre logger, mais tout d’abord il faut l’importer :

Par exemple, on veut tester la fonction qui affiche la liste des produits, s’il y a des erreurs ou pas :

La photo précédente c’est notre fonction avant l’implémentation du logger.

Ensuite, on va ajouter notre logger comme ça :

Que fait les loggers ajouté dans la fonction :

1- logger.customerLogger.log('info', 'Successfully got the list of customers.') : Utilisation du


logger pour enregistrer un message informatif dans le fichier de journal. Ce message indique
que la récupération des produits s'est déroulée avec succès.

2- logger.customerLogger.log('error', 'Error finding customers.') : Si une erreur se produit lors


de la récupération des produits, un message d'erreur est enregistré dans le fichier de journal.
Cela permet de suivre les erreurs et les problèmes potentiels dans l'application.
Maintenant on allant au Postman pour tester notre logger :

On remarque l'apparition d'un fichier appelé « customer.log ».


Qui contient l’information suivante :

Ce fragment représente un message de journalisation formaté au format JSON, tel que défini dans la
configuration du logger. Voici une explication détaillée de chaque partie :
1. `"level":"info"` : Cela indique le niveau de gravité du message. Dans cet exemple, le niveau est défini
sur "info" , ce qui signifie qu'il s'agit d'un message informatif. Les niveaux de gravité couramment
utilisés incluent "info" , "warn" (avertissement) et "error" (erreur), parmi d'autres.

2. `"message":"Successfully got the list of customers."` : Cette partie contient le contenu principal du
message de journalisation. Il s'agit du texte qui décrit l'événement ou l'action qui s'est produite. Dans
ce cas, le message indique que la liste des produits a été récupérée avec succès.
3. `"timestamp":"2024-02-28T15:51:25.003Z"` : Il s'agit de l'horodatage au moment où le message de
journalisation a été enregistré. Dans cet exemple, l'horodatage est au format ISO 8601, qui comprend
la date, l'heure, les minutes, les secondes et les millisecondes, ainsi que le fuseau horaire Z (UTC).
Maintenant on testant l’erreur on va changer le nom de notre table et on va tester si le logg va
enregistrer l’erreur :

Dans la photo, on a changer le nom du table « Product » à « Products » d’où si on a effectuer la requête
une erreur va se produit et le log doit capturer cet erreur.

Dans Postman :

Comme vous voyez ici, Posteman déclare une erreur.

Un autre fichier nommée customer-error.log apparaitre et contient le message suivant :

Ce message de journalisation est également formaté au format JSON, et il contient les mêmes
éléments qu’on a mentionné déjà :

"level":"error" : Comme précédemment, cela indique le niveau de gravité du message, qui est défini
sur "error" dans ce cas. Cela signifie qu'une erreur s'est produite lors de l'événement décrit dans le
message.

Vous aimerez peut-être aussi