add a stderr appender

Thus functions almost identically to the consoleAppender except that
instead of logging through `console.log` it uses `process.stderr.write`.
This commit is contained in:
Michael Demmer 2016-03-24 14:56:28 -07:00
parent 4488fa3464
commit 5e64fbd90b
2 changed files with 56 additions and 0 deletions

21
lib/appenders/stderr.js Normal file
View File

@ -0,0 +1,21 @@
"use strict";
var layouts = require('../layouts')
function stderrAppender(layout, timezoneOffset) {
layout = layout || layouts.colouredLayout;
return function(loggingEvent) {
process.stderr.write(layout(loggingEvent, timezoneOffset) + '\n');
};
}
function configure(config) {
var layout;
if (config.layout) {
layout = layouts.layout(config.layout.type, config.layout);
}
return stderrAppender(layout, config.timezoneOffset);
}
exports.appender = stderrAppender;
exports.configure = configure;

View File

@ -0,0 +1,35 @@
"use strict";
var assert = require('assert')
, vows = require('vows')
, layouts = require('../lib/layouts')
, sandbox = require('sandboxed-module');
vows.describe('../lib/appenders/stderr').addBatch({
'appender': {
topic: function() {
var messages = []
, fakeProcess = {
stderr: {
write: function(msg) { messages.push(msg); }
}
}
, appenderModule = sandbox.require(
'../lib/appenders/stderr',
{
globals: {
'process': fakeProcess
}
}
)
, appender = appenderModule.appender(layouts.messagePassThroughLayout);
appender({ data: ["blah"] });
return messages;
},
'should output to stderr': function(messages) {
assert.equal(messages[0], 'blah\n');
}
}
}).exportTo(module);