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
Aussi dans la bibliothèque
Abseil C++ : guide complet avec exemples pratiques
ASP.NET Core pour C# (.NET) : guide complet avec exemples
Générateur de QR codes en Rust : bibliothèque qr_code
Files d'attente de tâches en Go : Aperçu des bibliothèques et outils
Journalisation en Rust : aperçu des meilleures bibliothèques et solutions pour votre projet