|
| 1 | +const winston = require("winston"); |
| 2 | +const path = require("path"); |
| 3 | + |
| 4 | +// Définir le niveau de log à partir des variables d'environnement, avec 'info' par défaut |
| 5 | +const level = process.env.LOG_LEVEL || "info"; |
| 6 | + |
| 7 | +const logger = winston.createLogger({ |
| 8 | + level: level, |
| 9 | + // Format des logs |
| 10 | + format: winston.format.combine( |
| 11 | + winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), |
| 12 | + winston.format.errors({ stack: true }), // Pour logger la stack trace des erreurs |
| 13 | + winston.format.splat(), |
| 14 | + winston.format.json() // Logger en format JSON |
| 15 | + ), |
| 16 | + // Où envoyer les logs (transports) |
| 17 | + transports: [ |
| 18 | + // - Écrire tous les logs de niveau 'info' et inférieur dans `combined.log` |
| 19 | + // - Écrire tous les logs de niveau 'error' et inférieur dans `error.log` |
| 20 | + new winston.transports.File({ |
| 21 | + filename: path.join(__dirname, "logs", "error.log"), |
| 22 | + level: "error", |
| 23 | + }), |
| 24 | + new winston.transports.File({ |
| 25 | + filename: path.join(__dirname, "logs", "combined.log"), |
| 26 | + }), |
| 27 | + ], |
| 28 | +}); |
| 29 | + |
| 30 | +// Si nous ne sommes pas en production, logger aussi dans la console |
| 31 | +// avec un format plus lisible. |
| 32 | +if (process.env.NODE_ENV !== "production") { |
| 33 | + logger.add( |
| 34 | + new winston.transports.Console({ |
| 35 | + format: winston.format.combine( |
| 36 | + winston.format.colorize(), |
| 37 | + winston.format.simple() |
| 38 | + ), |
| 39 | + }) |
| 40 | + ); |
| 41 | +} |
| 42 | + |
| 43 | +// Créer un flux pour que Morgan puisse écrire dans les logs de Winston |
| 44 | +logger.stream = { |
| 45 | + write: function (message, encoding) { |
| 46 | + // Utilise le niveau 'info' pour les logs de Morgan |
| 47 | + logger.info(message.trim()); |
| 48 | + }, |
| 49 | +}; |
| 50 | + |
| 51 | +module.exports = logger; |
0 commit comments