Journalisation en TypeScript : la bibliothèque 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 a-t-on besoin ?

Winston est une bibliothèque de journalisation puissante et flexible pour les applications en TypeScript et JavaScript. Elle permet d'enregistrer de manière structurée des messages de différents niveaux (info, warn, error, debug) dans la console, des fichiers, des bases de données ou des services externes. Winston résout le problème de l'absence d'un mécanisme de journalisation intégré dans Node.js, en fournissant une API pratique pour configurer les formats, les transports (où écrire les logs) et les niveaux d'importance. La bibliothèque est largement utilisée dans les projets de production, les microservices et les applications web.

Installation

Pour installer winston dans un projet TypeScript, exécutez :

npm install winstonnpm install --save-dev @types/winston

Ou via yarn :

yarn add winstonyarn add --dev @types/winston

Fonctionnalités principales

  • Niveaux de journalisation : error, warn, info, http, verbose, debug, silly (personnalisables).
  • Transports : Console, File, HTTP, Stream, ainsi que des transports personnalisés (par exemple, vers Elasticsearch).
  • Formats : JSON, texte simple, timestamp, étiquettes, couleurs dans la console.
  • Transports multiples : écrire simultanément dans la console et dans un fichier.
  • Journalisation des exceptions : interception automatique de uncaughtException.
  • Wrapper proxy pour TypeScript : logger typé avec autocomplétion.

Exemple de code en TypeScript

import winston from 'winston';

const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), 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('Niveau de mémoire faible');logger.error('Erreur de connexion à la base de données', { error: err });

Quand utiliser winston

Winston est idéal pour :

  • Les applications backend en Node.js/TypeScript (Express, NestJS, Fastify).
  • L'architecture de microservices — collecte centralisée des logs via le transport HTTP.
  • La surveillance en production — écriture des logs dans des fichiers avec rotation (winston-daily-rotate-file).
  • Le débogage et le développement — affichage coloré dans la console avec différents niveaux.
  • Les systèmes avec des exigences d'audit — logs structurés en JSON pour l'analyse.

N'utilisez pas winston dans des scripts simples où console.log suffit — c'est excessif pour les petits projets. Évitez également winston dans les applications clientes pour navigateur (préférez console ou des bibliothèques spécialisées).

Conclusion

Winston est la norme de facto pour la journalisation dans les projets TypeScript. Il offre flexibilité, performance et sécurité de typage avec une configuration appropriée. Commencez par un logger simple et étendez-le au fur et à mesure de la croissance de votre application.

Recommendations