Qu'est-ce que Winston et pourquoi en avez-vous besoin ?
Winston est une bibliothèque de journalisation puissante et flexible pour les applications en TypeScript et JavaScript. Elle permet d'enregistrer des logs dans différents endroits (console, fichiers, bases de données) avec différents niveaux d'importance. Contrairement au simple console.log, Winston offre un contrôle total sur le format des logs, leur rotation et leur filtrage.
Pourquoi utiliser Winston ? Dans les grands projets, la sortie console standard devient inutile : les logs se mélangent, se perdent et sont impossibles à analyser. Winston résout ces problèmes : vous pouvez configurer l'enregistrement des erreurs dans un fichier séparé, des messages d'information dans la console et des données de débogage dans une base de données. C'est essentiel pour le débogage, la surveillance et l'audit.
Installation
Pour installer Winston dans un projet TypeScript, exécutez la commande :
npm install winstonIl est également recommandé d'installer les types :
npm install --save-dev @types/winstonSi vous utilisez yarn :
yarn add winstonFonctionnalités principales
- Niveaux de journalisation : error, warn, info, http, verbose, debug, silly. Chaque niveau a une priorité, et vous pouvez configurer les niveaux à afficher dans différents transports.
- Transports : méthodes de sortie des logs. Intégrés : Console, File, Http, Stream. Vous pouvez créer les vôtres.
- Formats : personnalisation de l'apparence des logs (JSON, timestamp, sortie colorée).
- Rotation des fichiers : via le module supplémentaire
winston-daily-rotate-file, vous pouvez créer automatiquement de nouveaux fichiers de logs par jour ou par taille. - Métadonnées : transmission d'un contexte supplémentaire (par exemple, ID de requête, nom d'utilisateur).
Exemple de code en TypeScript
Créons un logger simple avec sortie vers la console et un fichier :
import winston from 'winston';
const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), transports: [ new winston.transports.Console({ format: winston.format.combine( winston.format.colorize(), winston.format.simple() ) }), new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }) ]});
// Utilisationlogger.info('Serveur démarré sur le port 3000');logger.error('Erreur de connexion à la base de données', { database: 'main' });Dans cet exemple : les messages d'information sont affichés dans la console (en couleur) et dans le fichier combined.log, tandis que les erreurs sont également enregistrées dans error.log. Le format des logs est JSON avec un horodatage.
Quand utiliser Winston ?
- Dans un environnement de production pour la surveillance des erreurs.
- Dans une architecture de microservices pour collecter les logs dans un stockage centralisé.
- Lorsque l'audit des actions des utilisateurs est nécessaire.
- Dans les projets nécessitant une analyse des logs avec ELK (Elasticsearch, Logstash, Kibana) ou d'autres systèmes.
Winston est le standard industriel pour la journalisation en TypeScript. Il est simple à configurer, mais évolutif pour répondre à des exigences complexes.
Aussi dans la bibliothèque
Journalisation pour Swift (iOS/macOS) : meilleures bibliothèques et solutions
Rate Limiting en Java : bibliothèques et outils pour le contrôle des requêtes (Bucket4j, Resilience4j)
Cryptographie en TypeScript : Aperçu de la bibliothèque crypto-js
Jetons JWT en PHP : Guide complet d'authentification et d'autorisation