Maison > interface Web > js tutoriel > Journalisation avancée de l'API Node.js avec Winston et Morgan

Journalisation avancée de l'API Node.js avec Winston et Morgan

WBOY
Libérer: 2024-07-20 07:37:29
original
748 Les gens l'ont consulté

Advanced Node.js API Logging with Winston and Morgan

La journalisation est un élément crucial de toute application, fournissant des informations sur le comportement de l'application, aidant à déboguer les problèmes et à surveiller les performances. Dans une API Node.js, une journalisation avancée peut être réalisée à l'aide de bibliothèques telles que Winston et Morgan. Cet article vous guidera dans la configuration et l'utilisation de Winston et Morgan pour la journalisation avancée dans une API Node.js.

Pourquoi la journalisation avancée est requise
La journalisation avancée est essentielle pour plusieurs raisons :

  • Débogage et dépannage : les journaux fournissent un historique détaillé des événements d'application, ce qui est inestimable lors du diagnostic des problèmes. Ils aident à identifier la cause profonde des erreurs et à comprendre la séquence d'actions menant à un problème.

  • Surveillance et maintenance : la surveillance continue des journaux permet aux développeurs de suivre la santé et les performances de l'application. En analysant les journaux, vous pouvez détecter les anomalies, les goulots d'étranglement des performances et les problèmes potentiels avant qu'ils ne deviennent critiques.

  • Audit et conformité : Pour de nombreuses applications, en particulier celles traitant des données sensibles, la tenue de journaux détaillés est une exigence de conformité. Les journaux fournissent un enregistrement des actions des utilisateurs et des modifications du système, ce qui peut être essentiel pour les audits et la conformité réglementaire.

  • Sécurité : la journalisation des événements liés à la sécurité, tels que les tentatives de connexion infructueuses, les accès non autorisés et les activités suspectes, est cruciale pour détecter et répondre aux menaces de sécurité. La journalisation avancée aide à maintenir un environnement d'application sécurisé.

Table des matières

  1. Introduction à Winston et Morgan
  2. Configurer un projet Node.js
  3. Installation de Winston et Morgan
  4. Configuration de Winston pour la journalisation avancée
  5. Intégration de Morgan pour la journalisation des requêtes HTTP
  6. Combiner Winston et Morgan
  7. Personnalisation des formats de journalisation
  8. Se connecter à différents transports
  9. Gestion et journalisation des erreurs
  10. Conclusion

1.Introduction à Winston et Morgan
Winston est une bibliothèque de journalisation polyvalente et facile à utiliser pour Node.js. Il prend en charge plusieurs transports pour les messages de journal, ce qui signifie que vous pouvez vous connecter à différents emplacements (console, fichiers, serveurs distants, etc.) avec différents formats et niveaux.

Morgan est un middleware d'enregistrement de requêtes HTTP pour Node.js. Il simplifie la journalisation des requêtes HTTP dans un format prédéfini, ce qui peut être très utile pour suivre les requêtes et réponses entrantes dans une API.

2.Configuration d'un projet Node.js
Tout d'abord, créez un nouveau projet Node.js si vous n'en avez pas déjà un :

mkdir node-api-logging
cd node-api-logging
npm init -y
Copier après la connexion

3.Installer Winston et Morgan
Installez Winston et Morgan avec Express (pour configurer une API de base) :

npm install express winston morgan
Copier après la connexion

4.Configuration de Winston pour la journalisation avancée
Créez un fichier logger.js pour configurer Winston :

// logger.js
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, printf, errors } = format;

const customFormat = printf(({ level, message, timestamp, stack }) => {
  return `${timestamp} ${level}: ${stack || message}`;
});

const logger = createLogger({
  level: 'info',
  format: combine(
    timestamp(),
    errors({ stack: true }),
    customFormat
  ),
  transports: [
    new transports.Console(),
    new transports.File({ filename: 'logs/error.log', level: 'error' }),
    new transports.File({ filename: 'logs/combined.log' })
  ]
});

module.exports = logger;
Copier après la connexion

5.Intégration de Morgan pour la journalisation des requêtes HTTP
Créez un fichier middleware/logger.js pour intégrer Morgan à Winston :

// middleware/logger.js
const morgan = require('morgan');
const logger = require('../logger');

const stream = {
  write: (message) => logger.info(message.trim())
};

const morganMiddleware = morgan('combined', { stream });

module.exports = morganMiddleware;
Copier après la connexion

6. Combiner Winston et Morgan
Intégrez Winston et Morgan dans votre application Express :

// app.js
const express = require('express');
const logger = require('./logger');
const morganMiddleware = require('./middleware/logger');

const app = express();

// Use Morgan middleware for HTTP request logging
app.use(morganMiddleware);

// Example route
app.get('/', (req, res) => {
  logger.info('Hello world endpoint was called');
  res.send('Hello, world!');
});

// Error handling middleware
app.use((err, req, res, next) => {
  logger.error(err.message, { stack: err.stack });
  res.status(500).send('Something went wrong!');
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  logger.info(`Server is running on port ${PORT}`);
});
Copier après la connexion

7.Personnalisation des formats de journalisation
Vous pouvez personnaliser les formats de journalisation dans Winston et Morgan. Par exemple, vous souhaiterez peut-être enregistrer des détails supplémentaires sur la demande, tels que les en-têtes, les paramètres de requête ou les temps de réponse.

8. Connexion à différents transports
Winston prend en charge divers transports. Vous pouvez vous connecter à différentes destinations en fonction de la gravité des messages. Par exemple, vous souhaiterez peut-être envoyer des journaux d'erreurs à un serveur de journalisation distant ou à un service tiers comme Loggly ou Papertrail.

9.Gestion et journalisation des erreurs
Une gestion et une journalisation appropriées des erreurs sont essentielles pour identifier et résoudre les problèmes. Assurez-vous que votre middleware de gestion des erreurs enregistre des informations détaillées sur les erreurs à l'aide de Winston.

10.Conclusion
En combinant Winston et Morgan, vous pouvez obtenir une journalisation avancée dans votre API Node.js. Winston fournit un cadre robuste pour la journalisation des événements au niveau des applications, tandis que Morgan simplifie la journalisation des requêtes HTTP. Ensemble, ils vous offrent une solution de journalisation complète qui améliore votre capacité à surveiller et déboguer votre application.

Aperçu final du code
Voici un bref récapitulatif des fichiers et de leur contenu :

  • logger.js : configure Winston avec un formatage et des transports personnalisés.
  • middleware/logger.js : intègre Morgan à Winston.
  • app.js : configure l'application Express, intégrant à la fois Winston et Morgan. Avec cette configuration, vous pouvez enregistrer et surveiller efficacement votre API Node.js, ce qui facilite sa maintenance et son débogage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal