feat: error handling

This commit is contained in:
Rami Cohen 2017-12-24 21:05:56 -07:00
parent 10dac6d6fd
commit 449db3d243
2 changed files with 63 additions and 3 deletions

View File

@ -2,6 +2,7 @@
const dgram = require('dgram');
const util = require('util');
const debug = require('debug')('log4js:logstashUDP');
function sendLog(udp, host, port, logObject) {
const buffer = Buffer.from(JSON.stringify(logObject));
@ -9,12 +10,12 @@ function sendLog(udp, host, port, logObject) {
/* eslint no-unused-vars:0 */
udp.send(buffer, 0, buffer.length, port, host, (err, bytes) => {
if (err) {
console.error('log4js.logstashUDP - %s:%p Error: %s', host, port, util.inspect(err));
debug('%s:%p Error: %s', host, port, util.inspect(err));
process.emit('log4jsError', 'logstashUDP', err, logObject);
}
});
}
function logstashUDP(config, layout) {
const udp = dgram.createSocket('udp4');
const type = config.logType ? config.logType : config.category;

View File

@ -6,11 +6,21 @@ const sandbox = require('sandboxed-module');
function setupLogging(category, options) {
const udpSent = {};
const socket = { closed: false };
let errorsOn = false;
const fakeDgram = {
createSocket: function () {
return {
send: function (buffer, offset, length, port, host, callback) {
if (errorsOn) {
process.emit(
'log4jsError', 'logstashUDP',
new Error('failed to send event'),
JSON.parse(buffer.toString())
);
return;
}
udpSent.date = new Date();
udpSent.host = host;
udpSent.port = port;
@ -40,11 +50,16 @@ function setupLogging(category, options) {
categories: { default: { appenders: ['logstash'], level: 'trace' } }
});
function setErrorsOn(val) {
errorsOn = val;
}
return {
logger: log4js.getLogger(category),
log4js: log4js,
results: udpSent,
socket: socket
socket: socket,
setErrorsOn: setErrorsOn
};
}
@ -267,5 +282,49 @@ test('logstashUDP appender', (batch) => {
});
});
batch.test('emit errors', (t) => {
const setup = setupLogging('myLogger', {
host: '127.0.0.1',
port: 10001,
type: 'logstashUDP',
category: 'myLogger',
layout: {
type: 'dummy'
}
});
// handle errors
let errorEmitted = false;
process.on('log4jsError', (adapter, err, logEvent) => {
t.equal(adapter, 'logstashUDP');
t.equal(err.message, 'failed to send event');
t.equal(logEvent.level, 'INFO');
errorEmitted = true;
});
// Send a message that should succeed
let msg = 'this message should work';
setup.logger.info(msg);
let json = JSON.parse(setup.results.buffer.toString());
t.equal(json.message, msg);
// Send a message that should fail
setup.results.buffer = null;
setup.setErrorsOn(true);
msg = 'this message should not work';
setup.logger.info(msg);
t.notOk(setup.results.buffer);
t.true(errorEmitted);
// Send another message that should succeed
setup.setErrorsOn(false);
msg = 'this message should work too';
setup.logger.info(msg);
json = JSON.parse(setup.results.buffer.toString());
t.equal(json.message, msg);
t.end();
});
batch.end();
});