From 5286c503753c34bd1163440924e8d215b3fe6ede Mon Sep 17 00:00:00 2001 From: Christiaan Westerbeek Date: Fri, 10 Jan 2014 21:18:16 +0100 Subject: [PATCH] Added the basic files for Loggly appender appender, example, test not tested yet! --- examples/loggly-appender.js | 26 ++++++++++++++++++++++++ lib/appenders/loggly.js | 40 +++++++++++++++++++++++++++++++++++++ test/logglyAppender-test.js | 33 ++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 examples/loggly-appender.js create mode 100644 lib/appenders/loggly.js create mode 100644 test/logglyAppender-test.js diff --git a/examples/loggly-appender.js b/examples/loggly-appender.js new file mode 100644 index 0000000..9a7bc54 --- /dev/null +++ b/examples/loggly-appender.js @@ -0,0 +1,26 @@ +//Note that loggly appender needs node-loggly to work. +//If you haven't got node-loggly installed, you'll get cryptic +//"cannot find module" errors when using the loggly appender +var log4js = require('../lib/log4js') +, log +, logmailer +, i = 0; +log4js.configure({ + "appenders": [ + { + type: "console", + category: "test" + }, + { + "type": "loggly", + "token": "12345678901234567890", + "subdomain": "your-subdomain", + "tags": ["test"], + "category": "test" + } + ] +}); + +var logger = log4js.getLogger("test"); +logger.info("Test log message"); +logger.debug("Test log message"); \ No newline at end of file diff --git a/lib/appenders/loggly.js b/lib/appenders/loggly.js new file mode 100644 index 0000000..eccca02 --- /dev/null +++ b/lib/appenders/loggly.js @@ -0,0 +1,40 @@ +"use strict"; +var layouts = require("../layouts") +, mailer = 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 basicLayout). + */ +function logglyAppender(config, layout) { + layout = layout || layouts.basicLayout; + + var client = loggly.createClient(config); + + + return function(loggingEvent) { + client.log(layout(loggingEvent)); + }; + +} + +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; \ No newline at end of file diff --git a/test/logglyAppender-test.js b/test/logglyAppender-test.js new file mode 100644 index 0000000..2d7f575 --- /dev/null +++ b/test/logglyAppender-test.js @@ -0,0 +1,33 @@ +"use strict"; +var assert = require('assert') +, vows = require('vows') +, layouts = require('../lib/layouts') +, sandbox = require('sandboxed-module'); + +vows.describe('../lib/appenders/loggly').addBatch({ + 'appender': { + topic: function() { + var messages = [] + , fakeLoggly = { + log: function(msg) { messages.push(msg); } + } + , appenderModule = sandbox.require( + '../lib/appenders/loggly', + { + globals: { + 'loggly': fakeLoggly + } + } + ) + , appender = appenderModule.appender(layouts.messagePassThroughLayout); + + appender({ data: ["blah"] }); + return messages; + }, + + 'should output to loggly': function(messages) { + assert.equal(messages[0], 'blah'); + } + } + +}).exportTo(module);