log4js-node/test/tap/disable-cluster-test.js
2022-06-23 01:00:07 +08:00

58 lines
1.7 KiB
JavaScript

const { test } = require('tap');
const cluster = require('cluster');
const log4js = require('../../lib/log4js');
const recorder = require('../../lib/appenders/recording');
cluster.removeAllListeners();
log4js.configure({
appenders: {
vcr: { type: 'recording' },
},
categories: { default: { appenders: ['vcr'], level: 'debug' } },
disableClustering: true,
});
if (cluster.isMaster) {
cluster.fork();
const masterLogger = log4js.getLogger('master');
const masterPid = process.pid;
masterLogger.info('this is master');
cluster.on('exit', () => {
const logEvents = recorder.replay();
test('cluster master', (batch) => {
batch.test('only master events should be logged', (t) => {
t.equal(logEvents.length, 1);
t.equal(logEvents[0].categoryName, 'master');
t.equal(logEvents[0].pid, masterPid);
t.equal(logEvents[0].data[0], 'this is master');
t.end();
});
batch.end();
});
});
} else {
const workerLogger = log4js.getLogger('worker');
workerLogger.info('this is worker', new Error('oh dear'));
const workerEvents = recorder.replay();
test('cluster worker', (batch) => {
batch.test('should send events to its own appender', (t) => {
t.equal(workerEvents.length, 1);
t.equal(workerEvents[0].categoryName, 'worker');
t.equal(workerEvents[0].data[0], 'this is worker');
t.type(workerEvents[0].data[1], 'Error');
t.match(workerEvents[0].data[1].stack, 'Error: oh dear');
t.end();
});
batch.end();
});
// test sending a cluster-style log message
process.send({ topic: 'log4js:message', data: { cheese: 'gouda' } });
cluster.worker.disconnect();
}