From 0870eba9c89b43508a0b0123ee7078834da82e36 Mon Sep 17 00:00:00 2001 From: barslev Date: Fri, 20 Mar 2020 16:10:01 +0100 Subject: [PATCH 1/2] Updates winston to version 3. --- package.json | 2 +- src/utils/logger.js | 31 ++++++++++++++++++++++++------- test/Logger.test.js | 4 ++-- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 731c086..0d96ab9 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "express": "^4.14.0", "lodash": "^4.15.0", "millisecond": "^0.1.2", - "winston": "^2.2.0" + "winston": "^3.0.0" }, "devDependencies": { "babel-cli": "^6.14.0", diff --git a/src/utils/logger.js b/src/utils/logger.js index 8dd5722..8464cee 100644 --- a/src/utils/logger.js +++ b/src/utils/logger.js @@ -20,15 +20,32 @@ module.exports = class Logger { } const makeLogger = (options) => { - return new (winston.Logger)({ + return winston.createLogger({ transports: [ - new (winston.transports.Console)({ + new (winston.transports.Console)((function(opts) { + const newOpts = {}; + const formatArray = []; + const formatOptions = { + stringify: () => winston.format((info) => { info.message = JSON.stringify(info.message); })(), + formatter: () => winston.format((info) => { info.message = opts.formatter(Object.assign(info, opts)); })(), + 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; })() + } + Object.keys(opts).filter(k => !formatOptions.hasOwnProperty(k)).forEach((k) => { newOpts[k] = opts[k]; }); + Object.keys(opts).filter(k => formatOptions.hasOwnProperty(k) && formatOptions[k]).forEach(k => formatArray.push(formatOptions[k]())); + newOpts.format = winston.format.combine(...formatArray); + return newOpts; + })({ colorize: true, level: options.level || 'info' - }) - // @TODO add option to write to a file - // use multi level for an error file etc https://github.com/winstonjs/winston#multiple-transports-of-the-same-type - // new (winston.transports.File)({ filename: 'somefile.log' }) + })) ] - }) + }); } diff --git a/test/Logger.test.js b/test/Logger.test.js index 6c5b3cf..f368fc8 100644 --- a/test/Logger.test.js +++ b/test/Logger.test.js @@ -4,10 +4,10 @@ const winston = require('winston') describe('Logger.test.js', () => { it('should instantiate a winston logger', () => { - assert.ok(config.logger instanceof winston.Logger) + assert.ok(config.logger instanceof winston.createLogger().constructor.__proto__) }) it('should use config.logger.global string to set a global var', () => { - assert.ok(global['myLoggerVar'] instanceof winston.Logger) + assert.ok(global['myLoggerVar'] instanceof winston.createLogger().constructor.__proto__) }) }) From 679d39464e6e56f1884b18de876f1ca613ddb7c9 Mon Sep 17 00:00:00 2001 From: barslev Date: Fri, 20 Mar 2020 16:13:14 +0100 Subject: [PATCH 2/2] Fixes linting issues --- src/utils/logger.js | 46 +++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/utils/logger.js b/src/utils/logger.js index 8464cee..8ea640f 100644 --- a/src/utils/logger.js +++ b/src/utils/logger.js @@ -22,30 +22,32 @@ module.exports = class Logger { const makeLogger = (options) => { return winston.createLogger({ transports: [ - new (winston.transports.Console)((function(opts) { - const newOpts = {}; - const formatArray = []; - const formatOptions = { - stringify: () => winston.format((info) => { info.message = JSON.stringify(info.message); })(), - formatter: () => winston.format((info) => { info.message = opts.formatter(Object.assign(info, opts)); })(), - 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; })() - } - Object.keys(opts).filter(k => !formatOptions.hasOwnProperty(k)).forEach((k) => { newOpts[k] = opts[k]; }); - Object.keys(opts).filter(k => formatOptions.hasOwnProperty(k) && formatOptions[k]).forEach(k => formatArray.push(formatOptions[k]())); - newOpts.format = winston.format.combine(...formatArray); - return newOpts; - })({ + new (winston.transports.Console)(convertOptionsToWinstonV3({ colorize: true, level: options.level || 'info' })) ] - }); + }) +} + +function convertOptionsToWinstonV3 (opts) { + const newOpts = {} + const formatArray = [] + const formatOptions = { + stringify: () => winston.format((info) => { info.message = JSON.stringify(info.message) })(), + formatter: () => winston.format((info) => { info.message = opts.formatter(Object.assign(info, opts)) })(), + 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 })() + } + Object.keys(opts).filter(k => !formatOptions.hasOwnProperty(k)).forEach((k) => { newOpts[k] = opts[k] }) + Object.keys(opts).filter(k => formatOptions.hasOwnProperty(k) && formatOptions[k]).forEach(k => formatArray.push(formatOptions[k]())) + newOpts.format = winston.format.combine(...formatArray) + return newOpts }