2 var vows = require('vows')
3 , assert = require('assert')
4 , log4js = require('../lib/log4js')
5 , sandbox = require('sandboxed-module')
8 function setupLogging(category, options) {
12 createSocket: function (type) {
14 send: function(buffer, offset, length, port, host, callback) {
15 udpSent.date = new Date();
18 udpSent.length = length;
20 udpSent.buffer = buffer;
21 callback(undefined, length);
27 var logstashModule = sandbox.require('../lib/appenders/logstashUDP', {
32 log4js.clearAppenders();
33 log4js.addAppender(logstashModule.configure(options), category);
36 logger: log4js.getLogger(category),
41 vows.describe('logstashUDP appender').addBatch({
42 'when logging with logstash via UDP': {
44 var setup = setupLogging('myCategory', {
47 "type": "logstashUDP",
48 "logType": "myAppType",
49 "category": "myLogger",
59 setup.logger.log('trace', 'Log event #1');
62 'an UDP packet should be sent': function (topic) {
63 assert.equal(topic.results.host, "127.0.0.1");
64 assert.equal(topic.results.port, 10001);
65 assert.equal(topic.results.offset, 0);
66 var json = JSON.parse(topic.results.buffer.toString());
67 assert.equal(json.type, 'myAppType');
73 assert.equal(JSON.stringify(json.fields), JSON.stringify(fields));
74 assert.equal(json.message, 'Log event #1');
75 // Assert timestamp, up to hours resolution.
76 var date = new Date(json['@timestamp']);
78 date.toISOString().substring(0, 14),
79 topic.results.date.toISOString().substring(0, 14)
84 'when missing some options': {
86 var setup = setupLogging('myLogger', {
89 "type": "logstashUDP",
90 "category": "myLogger",
96 setup.logger.log('trace', 'Log event #1');
99 'it sets some defaults': function (topic) {
100 var json = JSON.parse(topic.results.buffer.toString());
101 assert.equal(json.type, 'myLogger');
102 assert.equal(JSON.stringify(json.fields), JSON.stringify({'level': 'TRACE'}));
106 'when extra fields provided': {
108 var setup = setupLogging('myLogger', {
111 "type": "logstashUDP",
112 "category": "myLogger",
117 setup.logger.log('trace', 'Log event #1', {'extra1': 'value1', 'extra2': 'value2'});
119 },'they should be added to fields structure': function (topic) {
120 var json = JSON.parse(topic.results.buffer.toString());
121 var fields = {'extra1': 'value1', 'extra2': 'value2', 'level': 'TRACE'};
122 assert.equal(JSON.stringify(json.fields), JSON.stringify(fields));