winston

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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 winston

Fonctionnalités principales

  1. Niveaux de journalisation : error, warn, info, http, verbose, debug, silly.
  2. Transports : Console, File, HTTP, Stream et personnalisés.
  3. Formats : JSON, texte simple, horodatage, sortie colorée.
  4. Combinaison de plusieurs transports : par exemple, les erreurs dans un fichier et les infos dans la console.
  5. Transports et formats personnalisés : possibilité d'intégration avec Logstash, Sentry, Papertrail et autres.
  6. Rotation des logs : via le module complémentaire winston-daily-rotate-file.
  7. 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.

Recommendations