ae1a55fed9
Stop making use of any layout by default, because they are intended to format a line for human reading. Loggly indexes the values (of all properties of objects) and makes them available for querying.
84 lines
2.3 KiB
JavaScript
84 lines
2.3 KiB
JavaScript
'use strict';
|
|
var layouts = require('../layouts')
|
|
, loggly = require('loggly')
|
|
, os = require('os');
|
|
|
|
/**
|
|
* Loggly Appender. Sends logging events to Loggly using node-loggly
|
|
*
|
|
* @param config object with loggly configuration data
|
|
* {
|
|
* token: 'your-really-long-input-token',
|
|
* subdomain: 'your-subdomain',
|
|
* tags: ['loggly-tag1', 'loggly-tag2', .., 'loggly-tagn']
|
|
* }
|
|
* @param layout a function that takes a logevent and returns a string (defaults to objectLayout).
|
|
*/
|
|
function logglyAppender(config, layout) {
|
|
var client = loggly.createClient(config);
|
|
|
|
var packageMessage = function (loggingEvent) {
|
|
var BaseItem = function(level, msg) {
|
|
this.level = level || loggingEvent.level.toString();
|
|
this.category = loggingEvent.categoryName;
|
|
this.hostname = os.hostname().toString();
|
|
if (typeof msg !== 'undefined')
|
|
this.msg = msg;
|
|
};
|
|
|
|
var packageItem = function (item) {
|
|
if (item instanceof Error)
|
|
return new BaseItem('ERROR', item.message);
|
|
|
|
if (['string', 'number', 'boolean'].indexOf(typeof item) > -1 )
|
|
return new BaseItem(undefined, item);
|
|
|
|
var obj = new BaseItem();
|
|
if (Array.isArray(item))
|
|
return item.unshift(obj); //add base object as first item
|
|
|
|
if (item && Object.prototype.toString.call(item) === '[object Object]') {
|
|
for (var key in item) {
|
|
if (item.hasOwnProperty(key)) {
|
|
obj[key] = item[key]; //don't do packageItem on nested items, because level, category and hostname are needed on top level items only.
|
|
}
|
|
}
|
|
}
|
|
|
|
return obj;
|
|
};
|
|
|
|
if (loggingEvent.data.length === 1) {
|
|
return packageItem(loggingEvent.data[0]);
|
|
}
|
|
//length >1
|
|
var msg = loggingEvent.data;
|
|
for (var i = 0, l = msg.length; i < l; i++) {
|
|
msg[i] = packageItem(msg[i]);
|
|
}
|
|
|
|
return msg;
|
|
};
|
|
|
|
return function(loggingEvent) {
|
|
var a = layout ? layout(loggingEvent) : packageMessage(loggingEvent);
|
|
//console.log('log now', a);
|
|
client.log(a, config.tags, function(err, result) {
|
|
if (err) {
|
|
throw err;
|
|
}
|
|
});
|
|
};
|
|
}
|
|
|
|
function configure(config) {
|
|
var layout;
|
|
if (config.layout) {
|
|
layout = layouts.layout(config.layout.type, config.layout);
|
|
}
|
|
return logglyAppender(config, layout);
|
|
}
|
|
|
|
exports.name = 'loggly';
|
|
exports.appender = logglyAppender;
|
|
exports.configure = configure; |