tcp-server.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const debug = require('debug')('log4js:tcp-server');
  2. const net = require('net');
  3. const clustering = require('../clustering');
  4. const LoggingEvent = require('../LoggingEvent');
  5. const DELIMITER = '__LOG4JS__';
  6. exports.configure = (config) => {
  7. debug('configure called with ', config);
  8. const server = net.createServer((socket) => {
  9. let dataSoFar = '';
  10. const send = (data) => {
  11. if (data) {
  12. dataSoFar += data;
  13. if (dataSoFar.indexOf(DELIMITER)) {
  14. const events = dataSoFar.split(DELIMITER);
  15. if (!dataSoFar.endsWith(DELIMITER)) {
  16. dataSoFar = events.pop();
  17. } else {
  18. dataSoFar = '';
  19. }
  20. events
  21. .filter((e) => e.length)
  22. .forEach((e) => {
  23. clustering.send(LoggingEvent.deserialise(e));
  24. });
  25. } else {
  26. dataSoFar = '';
  27. }
  28. }
  29. };
  30. socket.setEncoding('utf8');
  31. socket.on('data', send);
  32. socket.on('end', send);
  33. });
  34. server.listen(config.port || 5000, config.host || 'localhost', () => {
  35. debug(`listening on ${config.host || 'localhost'}:${config.port || 5000}`);
  36. server.unref();
  37. });
  38. return {
  39. shutdown: (cb) => {
  40. debug('shutdown called.');
  41. server.close(cb);
  42. },
  43. };
  44. };