Journalisation en TypeScript : meilleures bibliothèques et outils en 2024

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

Journalisation pour TypeScript : meilleures solutions

La journalisation est un composant essentiel de toute application de production. Pour l'écosystème TypeScript, il existe de nombreuses bibliothèques, chacune offrant un ensemble unique de fonctionnalités. Dans cet article, nous examinons cinq meilleures solutions : Winston, Pino, Bunyan, Log4js et TSLog. Vous découvrirez leurs points forts, leurs particularités de configuration et obtiendrez des exemples de code prêts à l'emploi.



1. Winston — le standard universel

Winston est la bibliothèque de journalisation la plus populaire pour Node.js avec un support complet de TypeScript. Elle offre un système puissant de transports (où envoyer les logs) et de formatage.



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(), new winston.transports.File({ filename: 'error.log', level: 'error' }) ]});

logger.info('Application démarrée', { service: 'user-service' });logger.error('Erreur de connexion à la base de données', { error: err.message });


Avantages :

  • Système de transports flexible (fichiers, console, HTTP, MongoDB, Elasticsearch)
  • Support intégré de la rotation des logs via winston-daily-rotate-file
  • Excellente intégration avec TypeScript — typage complet
  • Compatibilité avec les profileurs et les systèmes APM


2. Pino — logger ultra-rapide

Pino est axé sur la performance — il est 5 à 10 fois plus rapide que Winston. Un choix idéal pour les systèmes à forte charge et les microservices.



import pino from 'pino';

const logger = pino({ level: process.env.LOG_LEVEL || 'info', transport: { target: 'pino-pretty', options: { colorize: true } }});

logger.info({ user: { id: 123 } }, 'Utilisateur authentifié');


Caractéristiques clés :

  • Consommation minimale de CPU et de mémoire
  • Support natif des streams Node.js
  • Sérialisation efficace des objets
  • Support des child-loggers pour la journalisation contextuelle


3. Bunyan — journalisation structurée par Joyent

Bunyan a été créé pour fonctionner avec une architecture microservices. Tous les logs sont produits au format JSON, ce qui simplifie leur analyse et leur parsing.



import bunyan from 'bunyan';

const logger = bunyan.createLogger({ name: 'myapp', level: 'info', serializers: { req: bunyan.stdSerializers.req, err: bunyan.stdSerializers.err }});

logger.info({ req: request }, 'Requête entrante');


Particularités :

  • Sérialiseurs intégrés pour les requêtes HTTP et les erreurs
  • Support du ringbuffer pour stocker les N dernières entrées
  • Utilitaire bunyan CLI pour un affichage formaté dans la console
  • Intégration simple avec la stack ELK


4. Log4js — approche familière depuis Java

Log4js est un port du framework Java populaire Log4j. Il propose une configuration familière via les niveaux et les appenders.



import log4js from 'log4js';

log4js.configure({ appenders: { out: { type: 'stdout' }, app: { type: 'file', filename: 'application.log' } }, categories: { default: { appenders: ['out', 'app'], level: 'debug' } }});

const logger = log4js.getLogger();logger.debug('Débogage de la connexion');logger.error('Erreur critique');


Points forts :

  • Système flexible de catégories et de filtres
  • Support de nombreux appenders (fichiers, bases de données, TCP)
  • Possibilité de redéfinir les niveaux pour différents modules
  • Support intégré du clustering


5. TSLog — solution légère pour TypeScript

TSLog est une bibliothèque minimaliste écrite spécialement pour TypeScript. Idéale pour les peti

Recommendations