import path from "path"; import { createLogger, format, Logger, LoggerOptions, transports } from "winston"; const defaultLevel = process.env.LOG_LEVEL || "info"; const mkOptions = (label: string): LoggerOptions => { return { level: defaultLevel, format: format.combine( format.errors({ stack: true }), format.label({ label }), format.colorize({ all: true }), format.timestamp({ format: "YYYY-MM-DD HH:mm:ss", }), format.printf((info) => `${info.timestamp} ${info.level} [${info.label}]: ${info.message}`) ), transports: [new transports.Console()], }; }; /** * Create a logger using custom options. * @param label: A label to be added before the message. * @param config: Logger options. */ const getLogger = (label: string = path.basename(__filename), config: LoggerOptions = {}): Logger => { return createLogger({ ...mkOptions(label), ...config }); }; export { getLogger };