Dienstag, 12. November 2013

log4js-node-mongodb appender - English



We are using log4js-node for logging in our node.js applications. It includes a bunch of log appenders, like console or file. But since we need an audit trail in our applications, we have to log into the database. So we wrote a log4js-node appender for logging into mongodb.

Install

Business a usual…
$ npm install log4js-node-mongodb

Usage

You can use this appender like all other log4js-node appenders. It just needs the connection-string to the mongo db. The default collection used is log. You can log a string or any kind of object. The objects are stored as they are and not converted to strings.
var log4js = require('log4js'),
    mongoAppender = require('log4js-node-mongodb');

log4js.addAppender(
    mongoAppender.appender({
        connectionString: 'localhost:27017/logs'
    }),
    'cheese'
);

var logger = log4js.getLogger('cheese');
logger.trace('Entering cheese testing');
logger.debug('Got cheese.');
logger.info('Cheese is Gouda.');
logger.warn('Cheese is quite smelly.');
logger.error('Cheese is too ripe!');
logger.fatal('Cheese was breeding ground for listeria.');

// log objects
logger.info({id: 1, name: 'wayne'});
logger.info([1, 2, 3]);
Or you can use the configure method.
var log4js = require('log4js');

log4js.configure({
    appenders: [
        {
            type: 'console'
        },
        {
            type: 'log4js-node-mongodb',
            connectionString: 'localhost:27017/logs',
            category: 'cheese'
        }
    ]
});
The log data is stored in the following format.
{
    _id: ObjectID,
    timestamp: loggingEvent.startTime,
    data: loggingEvent.data,
    level: loggingEvent.level,
    category: loggingEvent.logger.category
}
Here some examples.
var log4js = require('log4js'),
    mongoAppender = require('log4js-node-mongodb');

log4js.addAppender(
    mongoAppender.appender(
        {connectionString: 'localhost:27017/logs'}),
    'audit'
);

var logger = log4js.getLogger('audit');
logger.debug('Hello %s, your are user no %d!', 'wayne', 10);

// saved as
{
    _id: new ObjectID(),
    timestamp: new Date(),
    data: 'Hello wayne, your are user no 10!',
    level: {
        level: 10000,
        levelStr: 'DEBUG'
    },
    category: 'audit'
}

logger.info({id: 1, name: 'wayne'});

// saved as
{
    _id: new ObjectID(),
    timestamp: new Date(),
    data: {
        id: 1,
        name: 'wayne'
    },
    level: {
        level: 20000,
        levelStr: 'INFO'
    },
    category: 'audit'
}

Options

There are some options which can by set through the config object.

name type default value required
connectionString string undefined yes
collectionName string 'log' no
write string 'fast' no
layout string 'messagePassThroughLayout' no

var log4js = require('log4js'),
    mongoAppender = require('log4js-node-mongodb');

log4js.addAppender(
    mongoAppender.appender({
        connectionString: 'localhost:27017/logs', 
        collectionName: 'audit', 
        write: 'safe'
    }),
    'audit'
);

var logger = log4js.getLogger('audit');
logger.info('User %s logged in', 'wayne');
The complete documentation can be found in the github repo.

log4js-node-mongodb appender - Deutsch



Wir benutzen log4js-node für das Logging in unseren node.js Anwendungen. Log4js bringt schon eine Menge an Appendern mit, z.B. File oder Console. Da wir aber in unseren Anwendungen auch ein Audit brauchen, ist es wichtig,in eine Datenbank loggen zu können. Deshalb haben wir einen log4js Appender entwickelt, der in eine MongoDB loggen kann.

Installation

So wie immer…
$ npm install log4js-node-mongodb

Verwendung

Benutzt wird dieser Appender wie jeder andere log4js Appender. Man muss nur den connection-string zu der Mongo Datenbank übergeben. Die Standard collection, welche benutzt wird, ist log. Man kann einen string oder alle Arten von object loggen. Objekte werden so gespeichert wie sie sind, und nicht in einen string konvertiert.
var log4js = require('log4js'),
    mongoAppender = require('log4js-node-mongodb');

log4js.addAppender(
    mongoAppender.appender({
        connectionString: 'localhost:27017/logs'
    }),
    'cheese'
);

var logger = log4js.getLogger('cheese');
logger.trace('Entering cheese testing');
logger.debug('Got cheese.');
logger.info('Cheese is Gouda.');
logger.warn('Cheese is quite smelly.');
logger.error('Cheese is too ripe!');
logger.fatal('Cheese was breeding ground for listeria.');

// log objects
logger.info({id: 1, name: 'wayne'});
logger.info([1, 2, 3]);
Oder man benutzt die Methode configure.
var log4js = require('log4js');

log4js.configure({
    appenders: [
        {
            type: 'console'
        },
        {
            type: 'log4js-node-mongodb',
            connectionString: 'localhost:27017/logs',
            category: 'cheese'
        }
    ]
});
Die log Daten werden in folgendem Format gespeichert.
{
    _id: ObjectID,
    timestamp: loggingEvent.startTime,
    data: loggingEvent.data,
    level: loggingEvent.level,
    category: loggingEvent.logger.category
}
Hier ein paar Beispiele.
var log4js = require('log4js'),
    mongoAppender = require('log4js-node-mongodb');

log4js.addAppender(
    mongoAppender.appender(
        {connectionString: 'localhost:27017/logs'}),
    'audit'
);

var logger = log4js.getLogger('audit');
logger.debug('Hello %s, your are user no %d!', 'wayne', 10);

// saved as
{
    _id: new ObjectID(),
    timestamp: new Date(),
    data: 'Hello wayne, your are user no 10!',
    level: {
        level: 10000,
        levelStr: 'DEBUG'
    },
    category: 'audit'
}

logger.info({id: 1, name: 'wayne'});

// saved as
{
    _id: new ObjectID(),
    timestamp: new Date(),
    data: {
        id: 1,
        name: 'wayne'
    },
    level: {
        level: 20000,
        levelStr: 'INFO'
    },
    category: 'audit'
}

Optionen

Es gibt ein paar Optionen welche man über das config object einstellen kann.

Name Typ Standardwert Benötigt
connectionString string undefined ja
collectionName string 'log' nein
write string 'fast' nein
layout string 'messagePassThroughLayout' nein

var log4js = require('log4js'),
    mongoAppender = require('log4js-node-mongodb');

log4js.addAppender(
    mongoAppender.appender({
        connectionString: 'localhost:27017/logs', 
        collectionName: 'audit', 
        write: 'safe'
    }),
    'audit'
);

var logger = log4js.getLogger('audit');
logger.info('User %s logged in', 'wayne');
Die komplette Dokumentation findet man in dem Github Repository.