2 var layouts = require('../layouts')
3 , dgram = require('dgram')
4 , util = require('util');
6 function logstashUDP (config, layout) {
7 var udp = dgram.createSocket('udp4');
8 var type = config.logType ? config.logType : config.category;
9 layout = layout || layouts.dummyLayout;
13 return function log(loggingEvent) {
16 https://gist.github.com/jordansissel/2996677
18 "message" => "hello world",
20 "@timestamp" => "2014-04-22T23:03:14.111Z",
22 "host" => "hello.local"
24 @timestamp is the ISO8601 high-precision timestamp for the event.
25 @version is the version number of this json schema
26 Every other field is valid and fine.
29 if (loggingEvent.data.length > 1) {
30 var secondEvData = loggingEvent.data[1];
31 for (var k in secondEvData) {
32 config.fields[k] = secondEvData[k];
35 config.fields.level = loggingEvent.level.levelStr;
39 "@timestamp" : (new Date(loggingEvent.startTime)).toISOString(),
40 "type" : config.logType ? config.logType : config.category,
41 "message" : layout(loggingEvent),
42 "fields" : config.fields
44 sendLog(udp, config.host, config.port, logObject);
48 function sendLog(udp, host, port, logObject) {
49 var buffer = new Buffer(JSON.stringify(logObject));
50 udp.send(buffer, 0, buffer.length, port, host, function(err, bytes) {
53 "log4js.logstashUDP - %s:%p Error: %s", host, port, util.inspect(err)
59 function configure(config) {
62 layout = layouts.layout(config.layout.type, config.layout);
64 return logstashUDP(config, layout);
67 exports.appender = logstashUDP;
68 exports.configure = configure;