const { test } = require('tap'); const debug = require('debug'); const sandbox = require('@log4js-node/sandboxed-module'); test('default settings', (batch) => { const originalListener = process.listeners('warning')[process.listeners('warning').length - 1]; const warningListener = (error) => { if (error.name === 'DeprecationWarning') { if ( error.code.startsWith('log4js-node-DEP0001') || error.code.startsWith('log4js-node-DEP0002') ) { return; } } originalListener(error); }; process.off('warning', originalListener); process.on('warning', warningListener); const debugWasEnabled = debug.enabled('log4js:appenders'); const debugLogs = []; const originalWrite = process.stderr.write; process.stderr.write = (string, encoding, fd) => { debugLogs.push(string); if (debugWasEnabled) { originalWrite.apply(process.stderr, [string, encoding, fd]); } }; const originalNamespace = debug.disable(); debug.enable(`${originalNamespace}, log4js:appenders`); batch.teardown(async () => { // next event loop so that past warnings will not be printed setImmediate(() => { process.off('warning', warningListener); process.on('warning', originalListener); }); process.stderr.write = originalWrite; debug.enable(originalNamespace); }); const output = []; const log4js = sandbox.require('../../lib/log4js', { requires: { './appenders/stdout': { name: 'stdout', appender() { // deprecated return function (evt) { output.push(evt); }; }, shutdown() { // deprecated }, configure() { return this.appender(); }, }, debug, }, }); let logger; batch.test( 'should call configure() on getLogger() if not configured', (t) => { const DEP0001 = debugLogs.filter( (e) => e.indexOf('log4js-node-DEP0001') > -1 ).length; const DEP0002 = debugLogs.filter( (e) => e.indexOf('log4js-node-DEP0002') > -1 ).length; logger = log4js.getLogger('default-settings'); t.equal( debugLogs.filter((e) => e.indexOf('log4js-node-DEP0001') > -1).length, DEP0001 + 1, 'deprecation log4js-node-DEP0001 emitted' ); t.equal( debugLogs.filter((e) => e.indexOf('log4js-node-DEP0002') > -1).length, DEP0002 + 1, 'deprecation log4js-node-DEP0002 emitted' ); t.end(); } ); batch.test( 'nothing should be logged until level is set or configure() is called', (t) => { const originalLevel = logger.level; t.equal( originalLevel.levelStr, 'OFF', 'default logger.level should be OFF' ); logger.info('This should not be logged yet.'); t.equal(output.length, 0, 'nothing should be logged'); t.test('after level is set', (assert) => { logger.level = 'debug'; logger.info('This should be logged.'); assert.equal( output.length, 1, 'should log the message if level is set' ); assert.equal( output[output.length - 1].data[0], 'This should be logged.' ); logger.level = originalLevel; assert.end(); }); t.test('after configure() is called', (assert) => { const DEP0001 = debugLogs.filter( (e) => e.indexOf('log4js-node-DEP0001') > -1 ).length; const DEP0002 = debugLogs.filter( (e) => e.indexOf('log4js-node-DEP0002') > -1 ).length; log4js.configure({ appenders: { stdout: { type: 'stdout' } }, categories: { default: { appenders: ['stdout'], level: 'debug' } }, }); assert.equal( debugLogs.filter((e) => e.indexOf('log4js-node-DEP0001') > -1).length, DEP0001 + 1, 'deprecation log4js-node-DEP0001 emitted' ); assert.equal( debugLogs.filter((e) => e.indexOf('log4js-node-DEP0002') > -1).length, DEP0002 + 1, 'deprecation log4js-node-DEP0002 emitted' ); logger.info('This should go to stdout.'); assert.equal( output.length, 2, 'should log the message after configure() is called' ); assert.equal( output[output.length - 1].data[0], 'This should go to stdout.' ); assert.end(); }); t.end(); } ); batch.end(); });