diff --git a/lib/logger.js b/lib/logger.js index f9cce2c..8e6e391 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -96,6 +96,10 @@ class Logger { this._useStack = (bool === true); return this; } + + isCallStackEnable() { + return this._useStack === true; + } } function addLevelMethods(target) { diff --git a/package.json b/package.json index 2d2abcc..b01b7e4 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ }, "devDependencies": { "@log4js-node/sandboxed-module": "^2.2.1", + "callsites": "^3.1.0", "codecov": "^3.3.0", "conventional-changelog": "^3.1.4", "deep-freeze": "0.0.1", diff --git a/test/tap/logger-test.js b/test/tap/logger-test.js index 1ac40eb..42be7ba 100644 --- a/test/tap/logger-test.js +++ b/test/tap/logger-test.js @@ -4,6 +4,7 @@ const test = require('tap').test; const debug = require('debug')('log4js:test.logger'); const sandbox = require('@log4js-node/sandboxed-module'); const levels = require('../../lib/levels'); +const callsites = require('callsites'); const events = []; const Logger = sandbox.require( @@ -126,5 +127,48 @@ test('../../lib/logger', (batch) => { t.end(); }); + batch.test('should (default) disable stack trace unless manual enable', (t) => { + const logger = new Logger('stack'); + logger.level = 'debug'; + + t.equal(logger.isCallStackEnable(), false); + + logger.enabelCallStack(false); + t.equal(logger.isCallStackEnable(), false); + + logger.enabelCallStack(0); + t.equal(logger.isCallStackEnable(), false); + + logger.enabelCallStack(''); + t.equal(logger.isCallStackEnable(), false); + + logger.enabelCallStack(null); + t.equal(logger.isCallStackEnable(), false); + + logger.enabelCallStack(); + t.equal(logger.isCallStackEnable(), true); + t.end(); + }); + + batch.test('should enable stack trace for call stack support', (t) => { + const logger = new Logger('stack'); + logger.level = 'debug'; + logger.enabelCallStack(); + t.equal(logger.isCallStackEnable(), true); + + logger.info('hello world'); + const callsite = callsites()[0]; + + t.equal(events.length, 1); + t.ok(events[0].data, 'hello world'); + t.ok(events[0].fileName, callsite.getFileName()); + t.ok(events[0].lineNumber, callsite.getLineNumber() - 1); + t.ok(events[0].lineNumber, 12); + + logger.enabelCallStack(false); + t.equal(logger.isCallStackEnable(), false); + t.end(); + }); + batch.end(); });