Log Driver

Build Status NPM Version codecov.io

Logdriver is a node.js logger that only logs to stdout.

You’re going to want to log the output of stdout and stderr anyway, so you might as well put all your logging through stdout. Logging libraries that don’t write to stdout or stderr are missing absolutely critical output like the stack trace if/when your app dies.

There are some other nice advantages:

node yourapp.js 2>&1 | node ircloggerbot.js 
node yourapp.js 2>&1 >> somefile.log 

NB: If you’re logging to a file, Logrotate is probably going to be your best friend.

node yourapp.js 2>&1 | logger

Usage:

Getting the default logger:

var logger = require('log-driver').logger;

This logger has levels ‘error’, ‘warn’, ‘info’, ‘debug’, and ‘trace’. If you don’t like those levels, change the default:

var logger = require('log-driver')({
  levels: ['superimportant', 'checkthisout', 'whocares' ]
});
logger.whocares("brangelina in lover's quarrel!");

Specifying what log level to log at to make logs less chatty:

var logger = require('log-driver')({ level: "info" });
logger.info("info test"); 
logger.warn("warn test"); 
logger.error("error test"); 
logger.trace("trace test"); 

output:

[info] "2013-03-26T18:30:14.570Z"  'info test'
[warn] "2013-03-26T18:30:14.573Z"  'warn test'
[error] "2013-03-26T18:30:14.574Z"  'error test'

(notice the trace() call was omitted because it’s less than the info level.

Turning off all log output (sometimes nice for automated tests to keep output clean):

var logger = require('log-driver')({ level: false });

Using the same logger everywhere: The last logger you created is always available this way:

var logger = require('log-driver').logger;

This way, if you use only one logger in your application (like most applications), you can just configure it once, and get it this way everywhere else.

Don’t like the logging format? Just change it by passing a new formatting function like so:

var logger = require('log-driver')({ 
  format: function() {
    // let's do pure JSON:
    return JSON.stringify(arguments);
  }
});