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": {
|
"dependencies": {
|
||||||
"axios": "^0.21.4",
|
"axios": "^0.21.4",
|
||||||
"dotenv": "^10.0.0",
|
"dotenv": "^10.0.0",
|
||||||
"pg": "^8.7.1"
|
"express": "^5.1.0",
|
||||||
|
"pg": "^8.7.1",
|
||||||
|
"winston": "^3.17.0"
|
||||||
},
|
},
|
||||||
"author": "Your Name",
|
"author": "Your Name",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
|
|||||||
@ -1,39 +1,82 @@
|
|||||||
const winston = require('winston');
|
const winston = require('winston');
|
||||||
const path = require('path');
|
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({
|
const logger = winston.createLogger({
|
||||||
level: 'info',
|
level: 'info',
|
||||||
format: winston.format.combine(
|
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()
|
winston.format.json()
|
||||||
),
|
),
|
||||||
transports: [
|
transports: [
|
||||||
// Log to a file for application events
|
// Log geral da aplicação
|
||||||
new winston.transports.File({ filename: path.join(__dirname, '../../logs/app.log') }),
|
new winston.transports.File({
|
||||||
// Log to a file for error events
|
filename: path.join(logsDir, 'app.log'),
|
||||||
new winston.transports.File({ filename: path.join(__dirname, '../../logs/error.log'), level: 'error' }),
|
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') {
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
logger.add(new winston.transports.Console({
|
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
|
// Funções utilitárias
|
||||||
const logError = (error) => {
|
const logError = (error, context = '') => {
|
||||||
logger.error(error);
|
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, meta = {}) => {
|
||||||
const logInfo = (message) => {
|
logger.info(message, meta);
|
||||||
logger.info(message);
|
};
|
||||||
|
|
||||||
|
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 = {
|
module.exports = {
|
||||||
|
logger,
|
||||||
logError,
|
logError,
|
||||||
logInfo,
|
logInfo,
|
||||||
|
logWarning,
|
||||||
|
logSync
|
||||||
};
|
};
|
||||||
Loading…
Reference in New Issue
Block a user