logstashUDP.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. "use strict";
  2. var layouts = require('../layouts')
  3. , dgram = require('dgram')
  4. , util = require('util');
  5. function logstashUDP (config, layout) {
  6. var udp = dgram.createSocket('udp4');
  7. var type = config.logType ? config.logType : config.category;
  8. layout = layout || layouts.colouredLayout;
  9. if(!config.fields) {
  10. config.fields = {};
  11. }
  12. return function(loggingEvent) {
  13. var logMessage = layout(loggingEvent);
  14. var fields = {};
  15. for(var i in config.fields) {
  16. fields[i] = config.fields[i];
  17. }
  18. fields['level'] = loggingEvent.level.levelStr;
  19. var logObject = {
  20. '@timestamp': (new Date(loggingEvent.startTime)).toISOString(),
  21. type: type,
  22. message: logMessage,
  23. fields: fields
  24. };
  25. sendLog(udp, config.host, config.port, logObject);
  26. };
  27. }
  28. function sendLog(udp, host, port, logObject) {
  29. var buffer = new Buffer(JSON.stringify(logObject));
  30. udp.send(buffer, 0, buffer.length, port, host, function(err, bytes) {
  31. if(err) {
  32. console.error(
  33. "log4js.logstashUDP - %s:%p Error: %s", host, port, util.inspect(err)
  34. );
  35. }
  36. });
  37. }
  38. function configure(config) {
  39. var layout;
  40. if (config.layout) {
  41. layout = layouts.layout(config.layout.type, config.layout);
  42. }
  43. return logstashUDP(config, layout);
  44. }
  45. exports.appender = logstashUDP;
  46. exports.configure = configure;