UNPKG

coddyger

Version:

Coddyger est une bibliothèque JavaScript/TypeScript qui fournit des fonctions communes et des plugins pour la gestion des données, la communication entre services, et des utilitaires avancés pour le développement d'applications.

189 lines (188 loc) 7.07 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LoggerService = exports.LogLevel = void 0; const path = __importStar(require("path")); const fs = __importStar(require("fs")); const pino_1 = __importDefault(require("pino")); const coddyger_1 = __importDefault(require("../coddyger")); var LogLevel; (function (LogLevel) { LogLevel["Info"] = "info"; LogLevel["Debug"] = "debug"; LogLevel["Warn"] = "warn"; LogLevel["Error"] = "error"; LogLevel["Fatal"] = "fatal"; LogLevel["Trace"] = "trace"; })(LogLevel || (exports.LogLevel = LogLevel = {})); class LoggerService { static getInstance() { if (!LoggerService.instance) { const isProduction = process.env.NODE_ENV === 'production'; const currentDate = coddyger_1.default.dateOnlyFormat(new Date().toISOString()); LoggerService.logDirectory = path.join(coddyger_1.default.root(), '/src/logs/'); // Création du répertoire de logs s'il n'existe pas if (!fs.existsSync(LoggerService.logDirectory)) { fs.mkdirSync(LoggerService.logDirectory, { recursive: true }); } const transport = pino_1.default.transport({ targets: [ // Fichier de logs pour tous les niveaux { target: 'pino/file', options: { destination: path.join(LoggerService.logDirectory, `${currentDate}.log`), mkdir: true }, level: 'trace' }, // Fichier séparé pour les erreurs { target: 'pino/file', options: { destination: path.join(LoggerService.logDirectory, `${currentDate}-error.log`), mkdir: true }, level: 'error' }, // Console avec formatage pretty en développement { target: 'pino-pretty', options: { colorize: true, translateTime: 'SYS:standard', ignore: 'pid,hostname', }, level: isProduction ? 'info' : 'debug' } ] }); LoggerService.instance = (0, pino_1.default)({ level: isProduction ? 'info' : 'debug', timestamp: pino_1.default.stdTimeFunctions.isoTime, formatters: { level: (label) => { return { level: label.toUpperCase() }; } }, redact: { paths: ['password', 'token', 'secret', '*.password', '*.token', '*.secret'], remove: true } }, transport); } return LoggerService.instance; } static log(payload) { const { type, content, location, method, context = {} } = payload; const logger = LoggerService.getInstance(); const logData = Object.assign(Object.assign({ location, method }, context), { msg: typeof content === 'string' ? content : JSON.stringify(content) }); switch (type) { case LogLevel.Debug: logger.debug(logData); break; case LogLevel.Info: logger.info(logData); break; case LogLevel.Warn: logger.warn(logData); break; case LogLevel.Error: logger.error(logData); break; case LogLevel.Fatal: logger.fatal(logData); break; case LogLevel.Trace: logger.trace(logData); break; default: logger.error(Object.assign(Object.assign({}, logData), { msg: 'Invalid log type' })); } } // Méthodes utilitaires pour un logging plus simple static debug(message, context) { this.log({ type: LogLevel.Debug, content: message, location: 'app', method: 'debug', context }); } static info(message, context) { this.log({ type: LogLevel.Info, content: message, location: 'app', method: 'info', context }); } static warn(message, context) { this.log({ type: LogLevel.Warn, content: message, location: 'app', method: 'warn', context }); } static error(message, context) { const errorMessage = message instanceof Error ? message.stack || message.message : message; this.log({ type: LogLevel.Error, content: errorMessage, location: 'app', method: 'error', context }); } static fatal(message, context) { const errorMessage = message instanceof Error ? message.stack || message.message : message; this.log({ type: LogLevel.Fatal, content: errorMessage, location: 'app', method: 'fatal', context }); } } exports.LoggerService = LoggerService;