Spaces:
Running
Running
import chalk from 'chalk'; | |
import moment from 'moment'; | |
const LogLevel = { | |
INFO: 'INFO', | |
WARN: 'WARN', | |
ERROR: 'ERROR', | |
DEBUG: 'DEBUG' | |
}; | |
class Logger { | |
static formatMessage(level, message) { | |
const timestamp = moment().format('YYYY-MM-DD HH:mm:ss'); | |
switch(level) { | |
case LogLevel.INFO: | |
return chalk.blue(`[${timestamp}] [${level}] ${message}`); | |
case LogLevel.WARN: | |
return chalk.yellow(`[${timestamp}] [${level}] ${message}`); | |
case LogLevel.ERROR: | |
return chalk.red(`[${timestamp}] [${level}] ${message}`); | |
case LogLevel.DEBUG: | |
return chalk.gray(`[${timestamp}] [${level}] ${message}`); | |
default: | |
return message; | |
} | |
} | |
static info(message, context) { | |
console.log(this.formatMessage(LogLevel.INFO, context ? `[${context}] ${message}` : message)); | |
} | |
static warn(message, context) { | |
console.warn(this.formatMessage(LogLevel.WARN, context ? `[${context}] ${message}` : message)); | |
} | |
static error(message, context, error = null) { | |
const errorMessage = error ? ` - ${error.message}` : ''; | |
console.error(this.formatMessage(LogLevel.ERROR, `${context ? `[${context}] ` : ''}${message}${errorMessage}`)); | |
} | |
static debug(message, context) { | |
if (process.env.NODE_ENV === 'development') { | |
console.debug(this.formatMessage(LogLevel.DEBUG, context ? `[${context}] ${message}` : message)); | |
} | |
} | |
static requestLogger(req, res, next) { | |
const startTime = Date.now(); | |
res.on('finish', () => { | |
const duration = Date.now() - startTime; | |
const logMessage = `${req.method} ${req.path} - ${res.statusCode} (${duration}ms)`; | |
if (res.statusCode >= 400) { | |
Logger.error(logMessage, undefined, 'HTTP'); | |
} else { | |
Logger.info(logMessage, 'HTTP'); | |
} | |
}); | |
next(); | |
} | |
} | |
export default Logger; |