FEAT: Implementação de sistema de logs com Winston
- Adiciona logs profissionais com Winston - Suporta ambientes de desenvolvimento e produção via NODE_ENV - Distingue operações de INSERT e UPDATE nos logs - Configura arquivos de log na pasta logs/
This commit is contained in:
parent
cb73486caa
commit
f69f2a7c9f
1066
package-lock.json
generated
1066
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -11,7 +11,9 @@
|
||||
"dependencies": {
|
||||
"axios": "^0.21.4",
|
||||
"dotenv": "^10.0.0",
|
||||
"pg": "^8.7.1"
|
||||
"express": "^5.1.0",
|
||||
"pg": "^8.7.1",
|
||||
"winston": "^3.17.0"
|
||||
},
|
||||
"author": "Your Name",
|
||||
"license": "MIT"
|
||||
|
||||
@ -1,39 +1,82 @@
|
||||
const winston = require('winston');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
|
||||
// Create a logger instance with specified settings
|
||||
// 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({
|
||||
level: 'info',
|
||||
format: winston.format.combine(
|
||||
winston.format.timestamp(),
|
||||
winston.format.timestamp({
|
||||
format: 'YYYY-MM-DD HH:mm:ss'
|
||||
}),
|
||||
winston.format.errors({ stack: true }), // ← Mostra stack trace de erros
|
||||
winston.format.json()
|
||||
),
|
||||
transports: [
|
||||
// Log to a file for application events
|
||||
new winston.transports.File({ filename: path.join(__dirname, '../../logs/app.log') }),
|
||||
// Log to a file for error events
|
||||
new winston.transports.File({ filename: path.join(__dirname, '../../logs/error.log'), level: 'error' }),
|
||||
// Log geral da aplicação
|
||||
new winston.transports.File({
|
||||
filename: path.join(logsDir, 'app.log'),
|
||||
maxsize: 5242880, // 5MB
|
||||
maxFiles: 5
|
||||
}),
|
||||
// Log de erros
|
||||
new winston.transports.File({
|
||||
filename: path.join(logsDir, 'error.log'),
|
||||
level: 'error',
|
||||
maxsize: 5242880,
|
||||
maxFiles: 3
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
// If not in production, log to the console as well
|
||||
// Log no console em desenvolvimento
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
logger.add(new winston.transports.Console({
|
||||
format: winston.format.simple(),
|
||||
format: winston.format.combine(
|
||||
winston.format.colorize(),
|
||||
winston.format.printf(({ timestamp, level, message, stack }) => {
|
||||
return `${timestamp} [${level}]: ${stack || message}`;
|
||||
})
|
||||
)
|
||||
}));
|
||||
}
|
||||
|
||||
// Utility function to log errors
|
||||
const logError = (error) => {
|
||||
logger.error(error);
|
||||
// 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}`);
|
||||
}
|
||||
};
|
||||
|
||||
// Utility function to log info messages
|
||||
const logInfo = (message) => {
|
||||
logger.info(message);
|
||||
const logInfo = (message, meta = {}) => {
|
||||
logger.info(message, meta);
|
||||
};
|
||||
|
||||
const logWarning = (message, meta = {}) => {
|
||||
logger.warn(message, meta);
|
||||
};
|
||||
|
||||
// Log de sincronização específico
|
||||
const logSync = (service, count, type) => {
|
||||
logger.info(`SYNC: ${service} - ${count} ${type} sincronizados`, {
|
||||
service,
|
||||
count,
|
||||
type
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
logger,
|
||||
logError,
|
||||
logInfo,
|
||||
logWarning,
|
||||
logSync
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user