const { test } = require('tap'); const log4js = require('../../lib/log4js'); test('subcategories', (batch) => { batch.test('loggers created after levels configuration is loaded', (t) => { log4js.configure({ appenders: { stdout: { type: 'stdout' } }, categories: { default: { appenders: ['stdout'], level: 'TRACE' }, sub1: { appenders: ['stdout'], level: 'WARN' }, 'sub1.sub11': { appenders: ['stdout'], level: 'TRACE' }, 'sub1.sub11.sub111': { appenders: ['stdout'], level: 'WARN' }, 'sub1.sub12': { appenders: ['stdout'], level: 'INFO' }, }, }); const loggers = { sub1: log4js.getLogger('sub1'), // WARN sub11: log4js.getLogger('sub1.sub11'), // TRACE sub111: log4js.getLogger('sub1.sub11.sub111'), // WARN sub12: log4js.getLogger('sub1.sub12'), // INFO sub13: log4js.getLogger('sub1.sub13'), // Inherits sub1: WARN sub112: log4js.getLogger('sub1.sub11.sub112'), // Inherits sub1.sub11: TRACE sub121: log4js.getLogger('sub1.sub12.sub121'), // Inherits sub12: INFO sub0: log4js.getLogger('sub0'), // Not defined, not inherited: TRACE }; t.test('check logger levels', (assert) => { assert.equal(loggers.sub1.level, log4js.levels.WARN); assert.equal(loggers.sub11.level, log4js.levels.TRACE); assert.equal(loggers.sub111.level, log4js.levels.WARN); assert.equal(loggers.sub12.level, log4js.levels.INFO); assert.equal(loggers.sub13.level, log4js.levels.WARN); assert.equal(loggers.sub112.level, log4js.levels.TRACE); assert.equal(loggers.sub121.level, log4js.levels.INFO); assert.equal(loggers.sub0.level, log4js.levels.TRACE); assert.end(); }); t.end(); }); batch.test('loggers created before levels configuration is loaded', (t) => { // reset to defaults log4js.configure({ appenders: { stdout: { type: 'stdout' } }, categories: { default: { appenders: ['stdout'], level: 'info' } }, }); // these should all get the default log level of INFO const loggers = { sub1: log4js.getLogger('sub1'), // WARN sub11: log4js.getLogger('sub1.sub11'), // TRACE sub111: log4js.getLogger('sub1.sub11.sub111'), // WARN sub12: log4js.getLogger('sub1.sub12'), // INFO sub13: log4js.getLogger('sub1.sub13'), // Inherits sub1: WARN sub112: log4js.getLogger('sub1.sub11.sub112'), // Inherits sub1.sub11: TRACE sub121: log4js.getLogger('sub1.sub12.sub121'), // Inherits sub12: INFO sub0: log4js.getLogger('sub0'), // Not defined, not inherited: TRACE }; log4js.configure({ appenders: { stdout: { type: 'stdout' } }, categories: { default: { appenders: ['stdout'], level: 'TRACE' }, sub1: { appenders: ['stdout'], level: 'WARN' }, 'sub1.sub11': { appenders: ['stdout'], level: 'TRACE' }, 'sub1.sub11.sub111': { appenders: ['stdout'], level: 'WARN' }, 'sub1.sub12': { appenders: ['stdout'], level: 'INFO' }, }, }); t.test('should still get new levels', (assert) => { // can't use .equal because by calling log4js.configure we create new instances assert.same(loggers.sub1.level, log4js.levels.WARN); assert.same(loggers.sub11.level, log4js.levels.TRACE); assert.same(loggers.sub111.level, log4js.levels.WARN); assert.same(loggers.sub12.level, log4js.levels.INFO); assert.same(loggers.sub13.level, log4js.levels.WARN); assert.same(loggers.sub112.level, log4js.levels.TRACE); assert.same(loggers.sub121.level, log4js.levels.INFO); assert.same(loggers.sub0.level, log4js.levels.TRACE); assert.end(); }); t.end(); }); batch.test( 'setting level on subcategories should not set parent level', (t) => { log4js.configure({ appenders: { stdout: { type: 'stdout' } }, categories: { default: { appenders: ['stdout'], level: 'trace' }, parent: { appenders: ['stdout'], level: 'error' }, }, }); const logger = log4js.getLogger('parent'); const subLogger = log4js.getLogger('parent.child'); t.test('should inherit parent level', (assert) => { assert.same(subLogger.level, log4js.levels.ERROR); assert.end(); }); t.test( 'changing child level should not change parent level', (assert) => { subLogger.level = 'info'; assert.same(subLogger.level, log4js.levels.INFO); assert.same(logger.level, log4js.levels.ERROR); assert.end(); } ); t.end(); } ); batch.end(); });