diff --git a/lib/utils/log/logger-output-adaptor.js b/lib/utils/log/logger-output-adaptor.js index 4e13a613..27427d27 100644 --- a/lib/utils/log/logger-output-adaptor.js +++ b/lib/utils/log/logger-output-adaptor.js @@ -11,25 +11,41 @@ class LoggerOutputAdaptor { this.output = output } + get console() { + return console + } + debug(message) { - if (!this.output || typeof this.output.debug != 'function' || typeof this.output.error != 'function') { - this.output.error("The Adaptor doesn't has the debug function.") + if (!this.output || typeof this.output.debug != 'function') { + if (typeof this.output.error === 'function') { + this.output.error("The Adaptor doesn't has the debug function.") + } else { + this.console.error("The Adaptor doesn't has the debug function.") + } return } this.output.debug(message) } info(message) { - if (!this.output || typeof this.output.info != 'function' || typeof this.output.error != 'function') { - this.output.error("The Adaptor doesn't has the info function.") + if (!this.output || typeof this.output.info != 'function') { + if (typeof this.output.error === 'function') { + this.output.error("The Adaptor doesn't has the info function.") + } else { + this.console.error("The Adaptor doesn't has the info function.") + } return } this.output.info(message) } warn(message) { - if (!this.output || typeof this.output.warn != 'function' || typeof this.output.error != 'function') { - this.output.error("The Adaptor doesn't has the warn function.") + if (!this.output || typeof this.output.warn != 'function') { + if (typeof this.output.error === 'function') { + this.output.error("The Adaptor doesn't has the warn function.") + } else { + this.console.error("The Adaptor doesn't has the warn function.") + } return } this.output.warn(message) @@ -37,7 +53,7 @@ class LoggerOutputAdaptor { error(message) { if (!this.output || typeof this.output.error != 'function') { - console.error("The Adaptor doesn't has the warn function.") + this.console.error("The Adaptor doesn't has the warn function.") return } this.output.error(message) diff --git a/test/utils/log/logger-output-adaptor.test.js b/test/utils/log/logger-output-adaptor.test.js index 20c4cdc3..a6c40628 100644 --- a/test/utils/log/logger-output-adaptor.test.js +++ b/test/utils/log/logger-output-adaptor.test.js @@ -10,13 +10,7 @@ const test = require('tape') const LoggerOutputAdaptor = require('../../../lib/utils/log/logger-output-adaptor') test('Adaptor method duck typing validation', (t) => { - const error = { - error: function () { - } - } - - let cloneError = Object.assign({}, error) - let actual = new LoggerOutputAdaptor(Object.assign(cloneError, { + let actual = new LoggerOutputAdaptor(Object.assign({}, { debug: function (message) { this.actualMessage = message } @@ -24,15 +18,7 @@ test('Adaptor method duck typing validation', (t) => { actual.debug('message') t.equal(actual.output.actualMessage, 'message') - cloneError = Object.assign({}, error) - let actualUnsafe = new LoggerOutputAdaptor(Object.assign(cloneError, { - })) - actualUnsafe.debug('message') - t.false(actualUnsafe.output.debug, 'this.output.debug is undefined') - - - cloneError = Object.assign({}, error) - actual = new LoggerOutputAdaptor(Object.assign(cloneError, { + actual = new LoggerOutputAdaptor(Object.assign({}, { info: function (message) { this.actualMessage = message } @@ -40,14 +26,7 @@ test('Adaptor method duck typing validation', (t) => { actual.info('message2') t.equal(actual.output.actualMessage, 'message2') - cloneError = Object.assign({}, error) - actualUnsafe = new LoggerOutputAdaptor(Object.assign(cloneError, { - })) - actualUnsafe.info('message') - t.false(actualUnsafe.output.info, 'this.output.info is undefined') - - cloneError = Object.assign({}, error) - actual = new LoggerOutputAdaptor(Object.assign(cloneError, { + actual = new LoggerOutputAdaptor(Object.assign({}, { warn: function (message) { this.actualMessage = message } @@ -55,14 +34,7 @@ test('Adaptor method duck typing validation', (t) => { actual.warn('message3') t.equal(actual.output.actualMessage, 'message3') - cloneError = Object.assign({}, error) - actualUnsafe = new LoggerOutputAdaptor(Object.assign(cloneError, { - })) - actualUnsafe.warn('message') - t.false(actualUnsafe.output.warn, 'this.output.warn is undefined') - - cloneError = Object.assign({}, error) - actual = new LoggerOutputAdaptor(Object.assign(cloneError, { + actual = new LoggerOutputAdaptor(Object.assign({}, { error: function (message) { this.actualMessage = message } @@ -70,9 +42,50 @@ test('Adaptor method duck typing validation', (t) => { actual.error('message4') t.equal(actual.output.actualMessage, 'message4') - actualUnsafe = new LoggerOutputAdaptor({ + t.end() +}) + +test('error message', (t) => { + const error = { + error: function () { + } + } + let actualUnsafe = new LoggerOutputAdaptor(Object.assign({ + debug: function (message) { + this.debugMessage = message + } + }, error)) + actualUnsafe.debug('debug message') + t.equal(actualUnsafe.output.debugMessage, 'debug message', 'this.output.debug is undefined') + + actualUnsafe = new LoggerOutputAdaptor(Object.assign({ + info: function (message) { + this.infoMessage = message + } + }, error)) + actualUnsafe.info('info message') + t.equal(actualUnsafe.output.infoMessage, 'info message', 'this.output.info is undefined') + + actualUnsafe = new LoggerOutputAdaptor(Object.assign({ + warn: function (message) { + this.warnMessage = message + } + }, error)) + actualUnsafe.warn('warn message') + t.equal(actualUnsafe.output.warnMessage, 'warn message', 'this.output.warn is undefined') + + actualUnsafe = new LoggerOutputAdaptor({}) + Object.defineProperty(actualUnsafe, "console", { + get: function () { + return { + error: function (message) { + actualUnsafe.errorMessage = message + } + } + } }) actualUnsafe.error('message') + t.equal(actualUnsafe.errorMessage, 'The Adaptor doesn\'t has the warn function.', 'Adaptor function not defined error message') t.false(actualUnsafe.output.error, 'this.output.error is undefined') t.end() diff --git a/test/utils/log/logger.integration.test.js b/test/utils/log/logger.integration.test.js index 589bf14b..2306e368 100644 --- a/test/utils/log/logger.integration.test.js +++ b/test/utils/log/logger.integration.test.js @@ -8,11 +8,11 @@ const test = require('tape') const { getLog } = require('../../../lib/supports') const Agent = require('../../../lib/agent') -const { clear } = require('../../../lib/config') +const { clear, getConfig } = require('../../../lib/config') -test('Logger Adaptor', (t) => { +test('no config logger', (t) => { clear() - let actual = getLog() + const actual = getLog() new Agent() t.equal(actual.adaptor.constructor.name, 'LoggerOutputAdaptor', 'log adaptor') t.equal(actual.type.name, 'NONE', 'when first loading time, log type is NONE') @@ -39,8 +39,16 @@ test('Logger Adaptor', (t) => { t.equal(actual.adaptor.output.output.infoMessage, 'a info message', 'info queue message') t.equal(actual.adaptor.output.output.warnMessage, 'a warn message', 'warn queue message') t.equal(actual.adaptor.output.output.errorMessage, 'a error message', 'error queue message') + t.end() +}) - actual = getLog() - t.equal(actual.type.name, 'WARN', 'debug') +test('config loading logger', (t) => { + clear() + getConfig() + const actual = getLog() + actual.debug('a debug message') + actual.info('a info message') + actual.warn('a warn message') + actual.error('a error message') t.end() }) \ No newline at end of file