diff --git a/package.json b/package.json index a54e944..76f2bb2 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "has": "^1.0.3", "lru-cache": "^4.1.5", "object.assign": "^4.1.0", - "winston": "^2.4.4" + "winston": "^3.0.0" }, "engines": { "node": ">= 0.10" diff --git a/src/utils/logger.js b/src/utils/logger.js index f6ea0ac..15c02af 100644 --- a/src/utils/logger.js +++ b/src/utils/logger.js @@ -9,6 +9,37 @@ const OPTIONS = { prettyPrint: process.env.NODE_ENV !== 'production', }; +function convertOptionsToWinstonV3(opts) { + const newOpts = {}; + const formatArray = []; + const formatOptions = { + stringify: () => winston.format((info) => { info.message = JSON.stringify(info.message); })(), // eslint-disable-line + formatter: () => winston.format( + (info) => { info.message = opts.formatter(Object.assign(info, opts)); })(), // eslint-disable-line + json: () => winston.format.json(), + raw: () => winston.format.json(), + label: () => winston.format.label(opts.label), + logstash: () => winston.format.logstash(), + prettyPrint: () => winston.format.prettyPrint({ depth: opts.depth || 2 }), + colorize: () => winston.format.colorize({ + level: opts.colorize === true || opts.colorize === 'level', + all: opts.colorize === 'all', + message: opts.colorize === 'message', + }), + timestamp: () => winston.format.timestamp(), + align: () => winston.format.align(), + showLevel: () => winston.format((info) => { info.message = `${info.level}: ${info.message}`; })(), // eslint-disable-line + }; + Object.keys(opts) + .filter(k => !Object.keys(formatOptions).includes(k)) + .forEach((k) => { newOpts[k] = opts[k]; }); + Object.keys(opts) + .filter(k => Object.keys(formatOptions).includes(k) && formatOptions[k]) + .forEach(k => formatArray.push(formatOptions[k]())); + newOpts.format = winston.format.combine(...formatArray); + return newOpts; +} + const loggerInterface = { init(config, loggerInstance) { if (loggerInstance) { @@ -16,9 +47,9 @@ const loggerInterface = { } else { const options = { ...OPTIONS, ...config }; - logger = new winston.Logger({ + logger = winston.createLogger({ transports: [ - new winston.transports.Console(options), + new winston.transports.Console(convertOptionsToWinstonV3(options)), ], }); }