import { createLogger, format, transports } from 'winston'; export type LoggerLevel = 'error' | 'warn' | 'info' | 'http' | 'verbose' | 'debug' | 'silly' export function generateLoggerOptions(level: LoggerLevel, label: string = '') { let readableFormat: any; if (label) { readableFormat = format.printf(({ level, message, timestamp, label }) => { return `[${timestamp} ${level}] - ${label}: ${message}`; }); } else { readableFormat = format.printf(({ level, message, timestamp }) => { return `[${timestamp} ${level}]: ${message}`; }); } return { level, format: label ? format.combine( format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }), format.label({ label }), format.errors({ stack: true }), readableFormat ) : format.combine( format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }), format.errors({ stack: true }), readableFormat ), exitOnError: false, transports: [ new (transports.Console)({ format: format.combine( format.colorize(), readableFormat ) }), ] } } export function getLogger(level: LoggerLevel, label: string = '') { return createLogger(generateLoggerOptions(level, label)); }