log4js-logstash-tcp
Version:
This is a copy of the logstashUDP appender but instead sending via UDP send via TCP to avoid the maximum 64k bytes message size with the logstashUDP appender.
121 lines (110 loc) • 3.98 kB
JavaScript
const net = require('net');
const log4jsAppender = require('../index.js');
const layouts = require('log4js/lib/layouts.js');
const context = {};
beforeEach(() => {
return new Promise((resolve) => {
context.config = {
"category": "TEST",
"type": "log4js-logstashTCP",
"host": "localhost",
"port": 5050,
"fields": {
"instance": "MyAwsInstance",
"source": "myApp",
"environment": "development"
}
};
context.testServer = net.createServer({
});
context.testServer.on('listening', function () {
resolve();
});
context.testServer.listen(context.config.port, context.config.host);
})
})
afterEach(() => {
return new Promise((resolve) => {
context.testServer.close();
context.testServer.on('close', function () {
delete context.testServer;
resolve();
});
// context.testServer.forceClose();
})
})
describe('check basic usage', () => {
"use strict";
it('testing logger setup, configuration and sending log message', (done) => {
const message = 'Im awesome';
let log = null;
try {
log = log4jsAppender.configure(context.config, layouts);
} catch (e) {
return fail('configure shouldn\'t throw an error');
}
context.testServer.on('connection', function (con) {
con.on('data', function (data) {
expect(JSON.parse(data.toString())['message']).toBe(message);
log.shutdown(() => {
done();
})
});
});
log({startTime: new Date(), level: {levelStr: 'FOO'}, categoryName: 'BAR', data: [message]});
})
it('testing logger setup, configuration and sending log message with context', (done) => {
const message = 'Im awesome';
let log = null;
try {
log = log4jsAppender.configure(context.config, layouts);
} catch (e) {
return fail('configure shouldn\'t throw an error');
}
context.testServer.on('connection', function (con) {
con.on('data', function (data) {
const parsedData = JSON.parse(data.toString())
expect(parsedData['message']).toBe(message);
expect(parsedData['testContextField']).toBe('test context field value')
log.shutdown(() => {
done();
})
});
});
log({
startTime: new Date(),
level: {levelStr: 'FOO'},
categoryName: 'BAR',
data: [message],
context: {
testContextField: "test context field value"
}});
})
it('testing logger setup, configuration and sending log message with context but gets overwritten by log message', (done) => {
const message = 'Im awesome';
let log = null;
try {
log = log4jsAppender.configure(context.config, layouts);
} catch (e) {
return fail('configure shouldn\'t throw an error');
}
context.testServer.on('connection', function (con) {
con.on('data', function (data) {
const parsedData = JSON.parse(data.toString());
expect(parsedData['message']).toBe(message);
expect(parsedData['testContextField']).toBe('context value overwritten');
log.shutdown(() => {
done();
})
});
});
log({
startTime: new Date(),
level: {levelStr: 'FOO'},
categoryName: 'BAR',
data: [message, {testContextField: "context value overwritten"}],
context: {
testContextField: "test context field value"
}});
})
})