import * as winston from 'winston' const { format, transports, addColors } = winston const { combine, timestamp, printf, colorize, label, errors } = format const parseMessage = (message) => { if (typeof message === 'object') { if (message.req) { return `Incoming request: route ${message.req.routeOptions.url}, method ${message.req.routeOptions.method}, from ${message.req.ip}` } if (message.res?.request) { return `Request completed: route ${message.res.request.routeOptions.url}, method ${message.res.request.routeOptions.method}, from ${message.res.request.ip} ` } } return message } const logPrinter = printf((log) => { const { level, message, stack } = log const _label = log.label const _timestamp = log.timestamp const _message = parseMessage(message) if (stack) return `${_timestamp} [${_label}] ${level}: ${_message}\n${stack}` return `${_timestamp} [${_label}] ${level}: ${_message}` }) // addColors({ ...winston.config.syslog.colors, fatal: winston.config.syslog.colors.error, warn: winston.config.syslog.colors.warn, trace: winston.config.syslog.colors.silly }) const init = (service) => { winston.loggers.add('default', { level: 'info', levels: Object.assign({ 'fatal': 0, 'warn': 4, 'trace': 7 }, winston.config.syslog.levels), format: combine( // colorize(), label({ label: service }), timestamp(), errors({ stack: true }), logPrinter ), transports: [ new transports.Console() ] }) const logger = winston.loggers.get('default') return logger } export default init