From ed5dfd0228ac65f8d056a3c27068562c8f9898ef Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Thu, 20 Feb 2020 19:37:31 +0100 Subject: [PATCH 1/8] start upgrading winston --- package-lock.json | 85 ++++++++++++++++++++++++++++++----- package.json | 2 +- website/server/libs/logger.js | 55 +++++++++++++++++------ 3 files changed, 115 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index e4688306b0..20e0d83fcb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1070,6 +1070,26 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=" + }, + "winston": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz", + "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==", + "requires": { + "async": "~1.0.0", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "stack-trace": "0.0.x" + }, + "dependencies": { + "async": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + } + } } } }, @@ -13544,22 +13564,43 @@ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" }, "winston": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz", - "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" + "async": "^2.6.1", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^2.1.1", + "one-time": "0.0.4", + "readable-stream": "^3.1.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.3.0" }, "dependencies": { "async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } } } }, @@ -13570,6 +13611,26 @@ "requires": { "node-loggly-bulk": "^2.0.1", "winston": "^2.3.1" + }, + "dependencies": { + "async": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + }, + "winston": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz", + "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==", + "requires": { + "async": "~1.0.0", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "stack-trace": "0.0.x" + } + } } }, "winston-transport": { diff --git a/package.json b/package.json index 4a14fadb93..4e5d18678d 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "uuid": "^3.4.0", "validator": "^11.0.0", "vinyl-buffer": "^1.0.1", - "winston": "^2.4.3", + "winston": "^3.2.1", "winston-loggly-bulk": "^2.0.2", "xml2js": "^0.4.23" }, diff --git a/website/server/libs/logger.js b/website/server/libs/logger.js index 2e753828d4..70a37d085f 100644 --- a/website/server/libs/logger.js +++ b/website/server/libs/logger.js @@ -12,31 +12,58 @@ const IS_TEST = nconf.get('IS_TEST'); const ENABLE_LOGS_IN_TEST = nconf.get('ENABLE_CONSOLE_LOGS_IN_TEST') === 'true'; const ENABLE_LOGS_IN_PROD = nconf.get('ENABLE_CONSOLE_LOGS_IN_PROD') === 'true'; -const logger = new winston.Logger(); +const logger = winston.createLogger(); if (IS_PROD) { if (ENABLE_LOGS_IN_PROD) { - logger.add(winston.transports.Console, { - timestamp: true, - colorize: false, - prettyPrint: false, - }); - logger.add(winston.transports.Loggly, { + logger.add(new winston.transports.Console({ // for errors + level: 'error', // errors always in JSON + format: winston.format.combine( + winston.format.timestamp(), + winston.format.prettyPrint(), + ), + })); + + /* logger.add(new winston.transports.Loggly(), { inputToken: nconf.get('LOGGLY_TOKEN'), subdomain: nconf.get('LOGGLY_SUBDOMAIN'), tags: ['Winston-NodeJS'], - json: true, - }); + json: true, format.json() + }); */ } // Do not log anything when testing unless specified } else if (!IS_TEST || (IS_TEST && ENABLE_LOGS_IN_TEST)) { logger - .add(winston.transports.Console, { - timestamp: true, - colorize: true, - prettyPrint: true, - }); + .add(new winston.transports.Console({ + level: 'warn', // warn and errors always in JSON + format: winston.format.combine( + winston.format.timestamp(), + winston.format.colorize(), + winston.format.prettyPrint(), + winston.format(info => { + console.log(info); + })(), + ), + })) + .add(new winston.transports.Console({ + level: 'info', // the rest as text + format: winston.format.combine( + // Ignores warn and errors + winston.format(info => { + if (info.level === 'error' || info.level === 'warn') { + return false; + } + + return info; + })(), + winston.format.timestamp(), + winston.format.colorize(), + winston.format.splat(), + winston.format.simple(), + + ), + })); } // exports a public interface insteaf of accessing directly the logger module From 362313fe0a83690b48fd1eacfca0ad3a05aadd4d Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Thu, 20 Feb 2020 20:05:58 +0100 Subject: [PATCH 2/8] fix info messages --- website/server/libs/logger.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/server/libs/logger.js b/website/server/libs/logger.js index 70a37d085f..d368b90028 100644 --- a/website/server/libs/logger.js +++ b/website/server/libs/logger.js @@ -61,7 +61,7 @@ if (IS_PROD) { winston.format.colorize(), winston.format.splat(), winston.format.simple(), - + winston.format.printf(info => `${info.timestamp} - ${info.level} ${info.message}`), ), })); } From c91c152b53a5ae82e1bb784c5cb40f4eabdb5061 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Thu, 20 Feb 2020 20:51:16 +0100 Subject: [PATCH 3/8] fix error messages in console --- website/server/libs/logger.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/website/server/libs/logger.js b/website/server/libs/logger.js index d368b90028..52bc16bec1 100644 --- a/website/server/libs/logger.js +++ b/website/server/libs/logger.js @@ -38,12 +38,19 @@ if (IS_PROD) { .add(new winston.transports.Console({ level: 'warn', // warn and errors always in JSON format: winston.format.combine( - winston.format.timestamp(), winston.format.colorize(), - winston.format.prettyPrint(), - winston.format(info => { - console.log(info); - })(), + winston.format.timestamp(), + winston.format.printf( + info => `${info.timestamp} - ${info.level} ${info.message}`, + ), + ), + })) + .add(new winston.transports.Console({ + level: 'warn', // warn and errors always in JSON + format: winston.format.combine( + winston.format.prettyPrint({ + colorize: true, + }), ), })) .add(new winston.transports.Console({ From 70326e5b5bf4e8bf318cdf91454081907a8f671f Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Thu, 20 Feb 2020 20:54:32 +0100 Subject: [PATCH 4/8] upgrade loggly transport --- package-lock.json | 30 ++++++------------------------ package.json | 2 +- website/server/libs/logger.js | 9 ++++----- 3 files changed, 11 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index 20e0d83fcb..a4e493203f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13605,32 +13605,14 @@ } }, "winston-loggly-bulk": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/winston-loggly-bulk/-/winston-loggly-bulk-2.0.3.tgz", - "integrity": "sha512-OdpOo+nwVD6TAKv5z+FnvtG2mPhJAfLYgL2Vou+mAF5LaKRloo6I3plx4333pY9XHVI1RsSDYwbSabGcYiMIvQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/winston-loggly-bulk/-/winston-loggly-bulk-3.0.1.tgz", + "integrity": "sha512-C86aohUze/qCRYhOVyxgqTuz3HmDK4mLss3OsVHxb4hfD+gw8jAEl3LEMOsqWHEnoJp/MC0wE1N3PeUcisLi2g==", "requires": { + "clone": "^2.1.1", "node-loggly-bulk": "^2.0.1", - "winston": "^2.3.1" - }, - "dependencies": { - "async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" - }, - "winston": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz", - "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==", - "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - } - } + "winston": "^3.0", + "winston-transport": "^4.2.0" } }, "winston-transport": { diff --git a/package.json b/package.json index 4e5d18678d..c71a8ad898 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "validator": "^11.0.0", "vinyl-buffer": "^1.0.1", "winston": "^3.2.1", - "winston-loggly-bulk": "^2.0.2", + "winston-loggly-bulk": "^3.0.1", "xml2js": "^0.4.23" }, "private": true, diff --git a/website/server/libs/logger.js b/website/server/libs/logger.js index 52bc16bec1..2fe1331ff2 100644 --- a/website/server/libs/logger.js +++ b/website/server/libs/logger.js @@ -1,6 +1,6 @@ // Logger utility import winston from 'winston'; -import 'winston-loggly-bulk'; +import { Loggly } from 'winston-loggly-bulk'; import nconf from 'nconf'; import _ from 'lodash'; import { @@ -24,14 +24,13 @@ if (IS_PROD) { ), })); - /* logger.add(new winston.transports.Loggly(), { + logger.add(new Loggly({ inputToken: nconf.get('LOGGLY_TOKEN'), subdomain: nconf.get('LOGGLY_SUBDOMAIN'), tags: ['Winston-NodeJS'], - json: true, format.json() - }); */ + json: true, + })); } - // Do not log anything when testing unless specified } else if (!IS_TEST || (IS_TEST && ENABLE_LOGS_IN_TEST)) { logger From 6a5e1dda0efee08e5c0319d91b7adaad85f6613c Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Thu, 20 Feb 2020 20:58:42 +0100 Subject: [PATCH 5/8] fixes --- website/server/libs/logger.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/website/server/libs/logger.js b/website/server/libs/logger.js index 2fe1331ff2..ef443b11ed 100644 --- a/website/server/libs/logger.js +++ b/website/server/libs/logger.js @@ -16,11 +16,10 @@ const logger = winston.createLogger(); if (IS_PROD) { if (ENABLE_LOGS_IN_PROD) { - logger.add(new winston.transports.Console({ // for errors - level: 'error', // errors always in JSON + logger.add(new winston.transports.Console({ format: winston.format.combine( winston.format.timestamp(), - winston.format.prettyPrint(), + winston.format.json(), ), })); @@ -35,7 +34,7 @@ if (IS_PROD) { } else if (!IS_TEST || (IS_TEST && ENABLE_LOGS_IN_TEST)) { logger .add(new winston.transports.Console({ - level: 'warn', // warn and errors always in JSON + level: 'warn', // warn and errors (text part) format: winston.format.combine( winston.format.colorize(), winston.format.timestamp(), @@ -45,7 +44,7 @@ if (IS_PROD) { ), })) .add(new winston.transports.Console({ - level: 'warn', // warn and errors always in JSON + level: 'warn', // warn and errors (json part) format: winston.format.combine( winston.format.prettyPrint({ colorize: true, @@ -53,7 +52,7 @@ if (IS_PROD) { ), })) .add(new winston.transports.Console({ - level: 'info', // the rest as text + level: 'info', // info messages as text format: winston.format.combine( // Ignores warn and errors winston.format(info => { @@ -66,7 +65,6 @@ if (IS_PROD) { winston.format.timestamp(), winston.format.colorize(), winston.format.splat(), - winston.format.simple(), winston.format.printf(info => `${info.timestamp} - ${info.level} ${info.message}`), ), })); From 6543a43854413395364155236c9bcb18a8630f0d Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Thu, 27 Feb 2020 12:16:53 +0100 Subject: [PATCH 6/8] wip test --- test/api/unit/libs/logger.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/api/unit/libs/logger.js b/test/api/unit/libs/logger.js index c9878f36fa..030997ca07 100644 --- a/test/api/unit/libs/logger.js +++ b/test/api/unit/libs/logger.js @@ -4,11 +4,11 @@ import { NotFound, } from '../../../../website/server/libs/errors'; -describe('logger', () => { +describe.only('logger', () => { let logSpy; beforeEach(() => { - logSpy = sandbox.stub(winston.Logger.prototype, 'log'); + logSpy = sandbox.stub(Object.getPrototypeOf(winston.createLogger()), 'log'); }); afterEach(() => { From 15e6cef7c47a3e0ed3389efc9c3cc756bd5b77a4 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sat, 29 Feb 2020 17:40:46 +0100 Subject: [PATCH 7/8] fix tests --- test/api/unit/libs/logger.js | 71 +++++++++++++++++++---------------- website/server/libs/logger.js | 18 +++++++++ 2 files changed, 56 insertions(+), 33 deletions(-) diff --git a/test/api/unit/libs/logger.js b/test/api/unit/libs/logger.js index 030997ca07..7683c8b076 100644 --- a/test/api/unit/libs/logger.js +++ b/test/api/unit/libs/logger.js @@ -1,14 +1,27 @@ -import winston from 'winston'; -import logger from '../../../../website/server/libs/logger'; +import logger, { _loggerConfig } from '../../../../website/server/libs/logger'; import { NotFound, } from '../../../../website/server/libs/errors'; -describe.only('logger', () => { - let logSpy; +describe('logger', () => { + let infoSpy; + let warnSpy; + let errorSpy; + + const originalLoggingEnabled = _loggerConfig.loggingEnabled; + + before(() => { // enable logging in tests + _loggerConfig.loggingEnabled = true; + }); + + after(() => { // reset value of _loggerConfig.loggingEnabled + _loggerConfig.loggingEnabled = originalLoggingEnabled; + }); beforeEach(() => { - logSpy = sandbox.stub(Object.getPrototypeOf(winston.createLogger()), 'log'); + infoSpy = sandbox.stub(_loggerConfig.logger, 'info'); + warnSpy = sandbox.stub(_loggerConfig.logger, 'warn'); + errorSpy = sandbox.stub(_loggerConfig.logger, 'error'); }); afterEach(() => { @@ -18,8 +31,8 @@ describe.only('logger', () => { describe('info', () => { it('calls winston\'s info log', () => { logger.info(1, 2, 3); - expect(logSpy).to.be.calledOnce; - expect(logSpy).to.be.calledWith('info', 1, 2, 3); + expect(infoSpy).to.be.calledOnce; + expect(infoSpy).to.be.calledWith(1, 2, 3); }); }); @@ -27,8 +40,8 @@ describe.only('logger', () => { context('non-error object', () => { it('passes through arguments if the first arg is not an error object', () => { logger.error(1, 2, 3, 4); - expect(logSpy).to.be.calledOnce; - expect(logSpy).to.be.calledWith('error', 1, 2, 3, 4); + expect(errorSpy).to.be.calledOnce; + expect(errorSpy).to.be.calledWith(1, 2, 3, 4); }); }); @@ -39,9 +52,8 @@ describe.only('logger', () => { data: 1, }, 2, 3); - expect(logSpy).to.be.calledOnce; - expect(logSpy).to.be.calledWith( - 'error', + expect(errorSpy).to.be.calledOnce; + expect(errorSpy).to.be.calledWith( errInstance.stack, { data: 1, fullError: errInstance }, 2, @@ -58,9 +70,8 @@ describe.only('logger', () => { fullError: anotherError, }, 2, 3); - expect(logSpy).to.be.calledOnce; - expect(logSpy).to.be.calledWith( - 'error', + expect(errorSpy).to.be.calledOnce; + expect(errorSpy).to.be.calledWith( errInstance.stack, { data: 1, fullError: anotherError }, 2, @@ -73,9 +84,8 @@ describe.only('logger', () => { logger.error(errInstance, null, 2, 3); - expect(logSpy).to.be.calledOnce; - expect(logSpy).to.be.calledWith( - 'error', + expect(errorSpy).to.be.calledOnce; + expect(errorSpy).to.be.calledWith( errInstance.stack, null, 2, @@ -88,9 +98,8 @@ describe.only('logger', () => { logger.error(errInstance, true, 2, 3); - expect(logSpy).to.be.calledOnce; - expect(logSpy).to.be.calledWith( - 'error', + expect(errorSpy).to.be.calledOnce; + expect(errorSpy).to.be.calledWith( errInstance.stack, true, 2, @@ -103,9 +112,8 @@ describe.only('logger', () => { logger.error(errInstance, { httpCode: 400 }, 2, 3); - expect(logSpy).to.be.calledOnce; - expect(logSpy).to.be.calledWith( - 'error', + expect(errorSpy).to.be.calledOnce; + expect(errorSpy).to.be.calledWith( errInstance.stack, { httpCode: 400, fullError: errInstance }, 2, @@ -121,9 +129,8 @@ describe.only('logger', () => { httpCode: 502, }, 2, 3); - expect(logSpy).to.be.calledOnce; - expect(logSpy).to.be.calledWith( - 'error', + expect(errorSpy).to.be.calledOnce; + expect(errorSpy).to.be.calledWith( errInstance.stack, { httpCode: 502, isHandledError: true, fullError: errInstance }, 2, @@ -139,9 +146,8 @@ describe.only('logger', () => { httpCode: 403, }, 2, 3); - expect(logSpy).to.be.calledOnce; - expect(logSpy).to.be.calledWith( - 'warn', + expect(warnSpy).to.be.calledOnce; + expect(warnSpy).to.be.calledWith( errInstance.stack, { httpCode: 403, isHandledError: true, fullError: errInstance }, 2, @@ -156,9 +162,8 @@ describe.only('logger', () => { logger.error(errInstance, {}, 2, 3); - expect(logSpy).to.be.calledOnce; - expect(logSpy).to.be.calledWith( - 'error', + expect(errorSpy).to.be.calledOnce; + expect(errorSpy).to.be.calledWith( errInstance.stack, { fullError: { diff --git a/website/server/libs/logger.js b/website/server/libs/logger.js index ef443b11ed..79ef86eb53 100644 --- a/website/server/libs/logger.js +++ b/website/server/libs/logger.js @@ -14,6 +14,13 @@ const ENABLE_LOGS_IN_PROD = nconf.get('ENABLE_CONSOLE_LOGS_IN_PROD') === 'true'; const logger = winston.createLogger(); +const _config = { + logger, + loggingEnabled: true, // false if no transport has been configured +}; + +export { _config as _loggerConfig }; // exported for use during tests + if (IS_PROD) { if (ENABLE_LOGS_IN_PROD) { logger.add(new winston.transports.Console({ @@ -46,6 +53,12 @@ if (IS_PROD) { .add(new winston.transports.Console({ level: 'warn', // warn and errors (json part) format: winston.format.combine( + // Remove stacktrace from json, printed separately + winston.format(info => { + const message = info.message.split('\n')[0]; + info.message = message; + return info; + })(), winston.format.prettyPrint({ colorize: true, }), @@ -68,11 +81,15 @@ if (IS_PROD) { winston.format.printf(info => `${info.timestamp} - ${info.level} ${info.message}`), ), })); +} else { + _config.loggingEnabled = false; } // exports a public interface insteaf of accessing directly the logger module const loggerInterface = { info (...args) { + if (!_config.loggingEnabled) return; + logger.info(...args); }, @@ -81,6 +98,7 @@ const loggerInterface = { // and an object of additional data to log alongside the error // If the first argument isn't an Error, it'll call logger.error with all the arguments supplied error (...args) { + if (!_config.loggingEnabled) return; const [err, errorData = {}, ...otherArgs] = args; if (err instanceof Error) { From ae3f014bb26dd527f563fd0050c4a105c2c724c0 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Sat, 29 Feb 2020 17:48:09 +0100 Subject: [PATCH 8/8] add ability to disable console logs in prod while keeping loggly active --- website/server/libs/logger.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/website/server/libs/logger.js b/website/server/libs/logger.js index 79ef86eb53..180f0ca8aa 100644 --- a/website/server/libs/logger.js +++ b/website/server/libs/logger.js @@ -10,7 +10,10 @@ import { const IS_PROD = nconf.get('IS_PROD'); const IS_TEST = nconf.get('IS_TEST'); const ENABLE_LOGS_IN_TEST = nconf.get('ENABLE_CONSOLE_LOGS_IN_TEST') === 'true'; -const ENABLE_LOGS_IN_PROD = nconf.get('ENABLE_CONSOLE_LOGS_IN_PROD') === 'true'; +const ENABLE_CONSOLE_LOGS_IN_PROD = nconf.get('ENABLE_CONSOLE_LOGS_IN_PROD') === 'true'; + +const LOGGLY_TOKEN = nconf.get('LOGGLY_TOKEN'); +const LOGGLY_SUBDOMAIN = nconf.get('LOGGLY_SUBDOMAIN'); const logger = winston.createLogger(); @@ -22,17 +25,19 @@ const _config = { export { _config as _loggerConfig }; // exported for use during tests if (IS_PROD) { - if (ENABLE_LOGS_IN_PROD) { + if (ENABLE_CONSOLE_LOGS_IN_PROD) { logger.add(new winston.transports.Console({ format: winston.format.combine( winston.format.timestamp(), winston.format.json(), ), })); + } + if (LOGGLY_TOKEN && LOGGLY_SUBDOMAIN) { logger.add(new Loggly({ - inputToken: nconf.get('LOGGLY_TOKEN'), - subdomain: nconf.get('LOGGLY_SUBDOMAIN'), + inputToken: LOGGLY_TOKEN, + subdomain: LOGGLY_SUBDOMAIN, tags: ['Winston-NodeJS'], json: true, }));