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

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