78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
var log4js = require('../log4js');
|
|
var layouts = require('../layouts');
|
|
var net = require('net');
|
|
var util = require('util');
|
|
|
|
var LogServer = function createLogServer(config) {
|
|
var actualAppender = config.actualAppender;
|
|
var server = net.createServer(function serverCreated(clientSocket) {
|
|
clientSocket.on('connect', function clientConnected() {
|
|
var logMessage = '';
|
|
clientSocket.on('data', function chunkReceived(chunk) {
|
|
logMessage += chunk;
|
|
});
|
|
clientSocket.on('end', function gotChunks() {
|
|
try {
|
|
var loggingEvent = JSON.parse(logMessage);
|
|
deserializeLoggingEvent(loggingEvent);
|
|
actualAppender(loggingEvent);
|
|
} catch (e) {
|
|
// JSON.parse failed, just log the contents probably a naughty.
|
|
actualAppender(createLoggingEvent('ERROR', 'Unable to parse log: ' + logMessage));
|
|
}
|
|
});
|
|
});
|
|
});
|
|
server.listen(config.loggerPort || 5000, config.loggerHost || 'localhost');
|
|
}
|
|
|
|
function createLoggingEvent(level, message) {
|
|
return {
|
|
startTime: new Date(),
|
|
categoryName: 'log4js',
|
|
level: { toString: function () {
|
|
return level;
|
|
}},
|
|
data: [ message ]
|
|
};
|
|
}
|
|
|
|
function deserializeLoggingEvent(loggingEvent) {
|
|
loggingEvent.startTime = new Date(loggingEvent.startTime);
|
|
loggingEvent.level.toString = function levelToString() {
|
|
return loggingEvent.level.levelStr;
|
|
};
|
|
}
|
|
|
|
function workerAppender(config) {
|
|
return function log(loggingEvent) {
|
|
var socket = net.createConnection(config.loggerPort || 5000, config.loggerHost || 'localhost');
|
|
socket.on('connect', function socketConnected() {
|
|
socket.end(JSON.stringify(loggingEvent), 'utf8');
|
|
});
|
|
};
|
|
}
|
|
|
|
function createAppender(config) {
|
|
if (config.mode === 'master') {
|
|
var server = new LogServer(config);
|
|
return config.actualAppender;
|
|
} else {
|
|
return workerAppender(config);
|
|
}
|
|
}
|
|
|
|
function configure(config) {
|
|
var actualAppender;
|
|
if (config.appender && config.mode === 'master') {
|
|
log4js.loadAppender(config.appender.type);
|
|
actualAppender = log4js.appenderMakers[config.appender.type](config.appender);
|
|
config.actualAppender = actualAppender;
|
|
}
|
|
return createAppender(config);
|
|
}
|
|
|
|
exports.name = 'multiprocess';
|
|
exports.appender = createAppender;
|
|
exports.configure = configure;
|