You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.6 KiB
50 lines
1.6 KiB
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
|
|
|