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..8ea640f 100644 --- a/src/utils/logger.js +++ b/src/utils/logger.js @@ -20,15 +20,34 @@ module.exports = class Logger { } const makeLogger = (options) => { - return new (winston.Logger)({ + return winston.createLogger({ transports: [ - new (winston.transports.Console)({ + new (winston.transports.Console)(convertOptionsToWinstonV3({ 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' }) + })) ] }) } + +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 +} 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__) }) })