Journalisation pour 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 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 winston

Il est également recommandé d'installer les types :

npm install --save-dev @types/winston

Si vous utilisez yarn :

yarn add winston

Fonctionnalité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.

Recommendations