const debug = require('debug')('log4js:tcp-server'); const net = require('net'); const clustering = require('../clustering'); const LoggingEvent = require('../LoggingEvent'); const DELIMITER = '__LOG4JS__'; exports.configure = (config) => { debug('configure called with ', config); // dummy shutdown if we're not master let shutdown = (cb) => { cb(); }; clustering.onlyOnMaster(() => { const server = net.createServer((socket) => { let dataSoFar = ''; const send = (data) => { if (data) { dataSoFar += data; if (dataSoFar.indexOf(DELIMITER)) { const events = dataSoFar.split(DELIMITER); if (!dataSoFar.endsWith(DELIMITER)) { dataSoFar = events.pop(); } else { dataSoFar = ''; } events.filter(e => e.length).forEach((e) => { clustering.send(LoggingEvent.deserialise(e)); }); } } }; socket.setEncoding('utf8'); socket.on('data', send); socket.on('end', send); }); server.listen(config.port || 5000, config.host || 'localhost', () => { debug(`listening on ${config.host || 'localhost'}:${config.port || 5000}`); server.unref(); }); shutdown = (cb) => { debug('shutdown called.'); server.close(cb); }; }); return { shutdown }; };