Surveillance et journalisation des applications TypeScript : guide complet

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

Introduction : Pourquoi votre projet TypeScript a besoin de surveillance et de journalisation

\n\n

Imaginez la situation : vous lancez un super service en TypeScript. Tout fonctionne parfaitement... jusqu'au premier appel d'un utilisateur : « Le site rame ! » ou « Les données ne sont pas sauvegardées ! ». Vous fouillez dans le code, mais vous ne pouvez pas reproduire le bug. Cela vous dit quelque chose ?

\n\n

TypeScript nous offre un typage statique puissant, mais il ne protège pas contre les erreurs logiques, les fuites mémoire ou les exceptions inattendues à l'exécution. C'est là qu'interviennent la surveillance et la journalisation. Ce n'est pas simplement une « case à cocher » dans une liste, mais un véritable bouée de sauvetage pour le développeur.

\n\n

Dans cet article, nous allons voir comment configurer correctement la surveillance et la journalisation dans les applications TypeScript (à la fois côté backend avec Node.js et côté frontend), quels outils choisir et comment ne pas se noyer dans une mer de logs. C'est parti !

\n\n

Pourquoi est-ce nécessaire ? Trois raisons principales

\n\n

1. Débogage en temps réel

\n

La journalisation permet de jeter un coup d'œil à l'intérieur de l'application en cours d'exécution. Au lieu de deviner, vous voyez les valeurs spécifiques des variables, la pile d'appels et la séquence des événements.

\n\n

2. Performances

\n

La surveillance des applications TypeScript aide à identifier les fonctions « lourdes » qui ralentissent l'interface utilisateur ou remplissent la mémoire. Vous verrez où l'application passe le plus de temps.

\n\n

3. Sécurité et audit

\n

Les logs sont la première chose que vous montrerez lors d'une enquête d'incident. Qui a demandé quelles données et quand ? Un log correct sauvera votre réputation.

\n\n

Outils de surveillance et de journalisation en TypeScript

\n\n

Voyons ce qui est réellement utilisé en production. Le choix de l'outil dépend de ce que vous développez : un backend avec Node.js ou un frontend dans le navigateur.

\n\n

Pour le backend (Node.js + TypeScript)

\n
    \n
  • Winston — le logger le plus populaire. Flexible, avec une multitude de transports (fichier, console, serveur distant).
  • \n
  • Pino — ultra-rapide, si les performances sont critiques.
  • \n
  • Morgan — pour les requêtes HTTP (fonctionne très bien avec Express).
  • \n
\n\n

Pour le frontend (TypeScript dans le navigateur)

\n
    \n
  • Sentry — le roi de la surveillance des erreurs. Capture les exceptions, les crashs, les requêtes lentes.
  • \n
  • LogRocket — enregistre les sessions utilisateur + les logs.
  • \n
  • Datadog / New Relic — pour les solutions d'entreprise.
  • \n
\n\n

Configuration de la journalisation en TypeScript : guide étape par étape

\n\n

Commençons par le backend classique. Installons Winston — il s'entend parfaitement avec TypeScript.

\n\n

Étape 1 : Installation et configuration de base

\n\n
npm install winston\nnpm install @types/winston --save-dev
\n\n

Créons un fichier logger.ts :

\n\n
import winston from 'winston';\n\nconst logger = winston.createLogger({\n    level: 'info',\n    format: winston.format.combine(\n        winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),\n        winston.format.errors({ stack: true }),\n        winston.format.json()\n    ),\n    defaultMeta: { service: 'user-service' },\n    transports: [\n        new winston.transports.File({ filename: 'error.log', level: 'error' }),\n        new winston.transports.File({ filename: 'combined.log' }),\n    ],\n});\n\nif (process.env.NODE_ENV !== 'production') {\n    logger.add(new winston.transports.Console({\n        format: winston.format.simple(),\n    }));\n}\n\nexport default logger;
\n\n

Maintenant, à n'importe quel endroit de votre code TypeScript, vous pouvez écrire :

\n\n
import logger from './logger';\n\nlogger.info('Utilisateur inscrit avec succès', { userId: 123 });\nlogger.error('Erreur de connexion à la base de données', { error: err.message });
\n\n

Notez que nous utilisons winston.format.errors({ stack: true }). Cela signifie que lors de la journalisation d'une erreur, la pile d'appels sera conservée — une mine d'or pour le débogage.

\n\n

Étape 2 : Ajout

Blogs

Book Recommendations