import winston from 'winston';
import { config } from '../config/environment';
const logFormat = winston.format.combine(
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
winston.format.errors({ stack: true }),
winston.format.printf(({ level, message, timestamp, stack, ...meta }) => {
let log = `${timestamp} [${level.toUpperCase()}]: ${message}`;
if (Object.keys(meta).length > 0) {
log += ` ${JSON.stringify(meta)}`;
}
if (stack) {
log += `\n${stack}`;
}
return log;
})
);
const jsonFormat = winston.format.combine(
winston.format.timestamp(),
winston.format.errors({ stack: true }),
winston.format.json()
);
export const logger = winston.createLogger({
level: config.NODE_ENV === 'production' ? 'info' : 'debug',
format: config.NODE_ENV === 'production' ? jsonFormat : logFormat,
transports: [
new winston.transports.Console({
format: config.NODE_ENV === 'production'
? jsonFormat
: winston.format.combine(winston.format.colorize(), logFormat),
}),
],
exceptionHandlers: [
new winston.transports.Console(),
],
rejectionHandlers: [
new winston.transports.Console(),
],
});
// Stream for morgan HTTP logging
export const httpLogStream = {
write: (message: string) => {
logger.http(message.trim());
},
};