Qu'est-ce que winston et pourquoi en avez-vous besoin ?
Winston est la bibliothèque de journalisation la plus populaire dans l'environnement Node.js. Elle fournit une API simple et universelle qui permet d'enregistrer des logs avec différents niveaux d'importance, de les formater et de les envoyer vers différentes destinations (console, fichiers, bases de données, services externes). Contrairement au simple console.log, winston offre un contrôle total sur la journalisation : vous pouvez configurer la rotation des logs par taille ou par date, filtrer les messages par niveau (info, warn, error, debug), ajouter des métadonnées (heure, identifiant de requête) et même utiliser plusieurs transports simultanément. C'est un outil indispensable pour la surveillance, le débogage et l'audit dans les applications en production.
Installation
Installez winston via npm ou yarn :
npm install winston# ouyarn add winstonFonctionnalités principales
- Niveaux de journalisation : error, warn, info, http, verbose, debug, silly.
- Transports : Console, File, HTTP, Stream et personnalisés.
- Formats : JSON, texte simple, horodatage, sortie colorée.
- Combinaison de plusieurs transports : par exemple, les erreurs dans un fichier et les infos dans la console.
- Transports et formats personnalisés : possibilité d'intégration avec Logstash, Sentry, Papertrail et autres.
- Rotation des logs : via le module complémentaire winston-daily-rotate-file.
- Exceptions et rejets non gérés : interception automatique des erreurs non traitées.
Exemple de code en JavaScript (Node.js)
const winston = require('winston');
// Création du loggerconst 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.warn('Mémoire insuffisante', { memoryUsage: process.memoryUsage() });try { throw new Error('Quelque chose s\'est cassé');} catch (err) { logger.error('Erreur lors du traitement de la requête', { error: err.message, stack: err.stack });}Quand l'utiliser
Winston est idéal pour tout projet Node.js nécessitant une journalisation structurée : serveurs web (Express, Koa), microservices, utilitaires CLI, bots, processus ETL. Il est particulièrement utile dans un environnement de production où vous devez centraliser la collecte des logs, analyser les erreurs et trouver rapidement les problèmes. Si votre projet utilise TypeScript, winston prend entièrement en charge les types.
Alternatives : pino (plus rapide, plus léger), log4js (configuration via XML/JSON), bunyan (logs JSON). Mais winston reste la solution la plus flexible et la plus répandue.
Aussi dans la bibliothèque
Swagger/OpenAPI pour C# (.NET) : Génération et documentation d'API
Traitement d'images en Kotlin : redimensionnement et recadrage avec la bibliothèque ImageMagick
Parsing HTML en Node.js : aperçu des meilleures bibliothèques et outils
Travailler avec XML en PHP : DOMDocument, SimpleXML et XPath
Inversify TypeScript : guide complet avec exemples pratiques