From 22d4324134f600025ba9e435030070ea23302597 Mon Sep 17 00:00:00 2001 From: "gabriel.amancio" Date: Mon, 15 Dec 2025 15:30:07 -0300 Subject: [PATCH] =?UTF-8?q?FEAT:=20Garantir=20a=20cria=C3=A7=C3=A3o=20do?= =?UTF-8?q?=20diret=C3=B3rio=20de=20logs=20e=20refatorar=20a=20configura?= =?UTF-8?q?=C3=A7=C3=A3o=20do=20logger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/shared/utils/logger.js | 73 +++++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 20 deletions(-) diff --git a/src/shared/utils/logger.js b/src/shared/utils/logger.js index c7e83e4..19dfbc9 100644 --- a/src/shared/utils/logger.js +++ b/src/shared/utils/logger.js @@ -1,9 +1,13 @@ const winston = require('winston'); const path = require('path'); require('winston-daily-rotate-file'); +const fs = require('fs'); -// O diretório de logs é criado pelo script de inicialização, mas garantimos aqui também. -const logsDir = path.resolve(process.cwd(), 'logs'); +// verifica se a pasta de logs existe, se não, cria +const logsDir = path.join(__dirname, '../../logs'); +if (!fs.existsSync(logsDir)) { + fs.mkdirSync(logsDir, { recursive: true }); +} // Configuração do logger com winston const logger = winston.createLogger({ @@ -12,7 +16,7 @@ const logger = winston.createLogger({ winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), - winston.format.errors({ stack: true }), // Mostra stack trace de erros + winston.format.errors({ stack: true }), // ← Mostra stack trace de erros winston.format.json() ), transports: [ @@ -23,6 +27,9 @@ const logger = winston.createLogger({ zippedArchive: true, maxSize: '5m', maxFiles: '10d', + options: { + flags: 'w' // Usa 'w' para sobrescrever o arquivo no início de cada dia + } }), // Log de erros new winston.transports.DailyRotateFile({ @@ -32,28 +39,54 @@ const logger = winston.createLogger({ zippedArchive: true, maxSize: '5m', maxFiles: '10d', + options: { + flags: 'w' // Usa 'w' para sobrescrever o arquivo no início de cada dia + } }) ], + }); -// Log no console em desenvolvimento -if (process.env.NODE_ENV !== 'production') { - logger.add(new winston.transports.Console({ - format: winston.format.combine( - winston.format.colorize(), - winston.format.printf((info) => { - const { timestamp, level, message, stack, ...meta } = info; - let logMessage = `${timestamp} [${level}]: ${stack || message}`; - if (Object.keys(meta).length) { - logMessage += ` ${JSON.stringify(meta, null, 2)}`; - } - return logMessage; - }) - ) - })); -} +// Adiciona o log no console para TODOS os ambientes (desenvolvimento e produção). +// Isso é essencial para que o `pm2 logs` funcione corretamente. +logger.add(new winston.transports.Console({ + format: winston.format.combine( + winston.format.colorize(), + winston.format.printf((info) => { + const { timestamp, level, message, stack, ...meta } = info; + let logMessage = `${timestamp} [${level}]: ${stack || message}`; + if (Object.keys(meta).length) { + logMessage += ` ${JSON.stringify(meta, null, 2)}`; + } + return logMessage; + }) + ) +})); -module.exports = logger; +// Funções utilitárias +const logError = (error, context = '') => { + if (error instanceof Error) { + logger.error(`${context} - ${error.message}`, { stack: error.stack }); + } else { + logger.error(`${context} - ${error}`); + } +}; + +const logInfo = (message, meta = {}) => { + logger.info(message, meta); +}; + +const logWarning = (message, meta = {}) => { + logger.warn(message, meta); +}; + + +module.exports = { + logger, + logError, + logInfo, + logWarning +}; /* DESCRIÇÃO: