README
Loggert
Easy and flexible logging in Node.
Usage
Getting started
For one process, the configuration of Loggert must be set once. Here is an example using some of the built in transports and formatters:
var log = require('loggert')('my-namespace');
var ConsoleTransport = log.transports.Console;
var FileTransport = log.transports.File;
var DefaultFormatter = log.formatters.Default;
var RawFormatter = log.formatters.Raw;
log.setConfig({
transports: [
new ConsoleTransport({
level: 'info', // Log "info" levels and above.
// level: ['info', 'error'], // Pass an array to only log "info" and "error" levels.
processId: true, // Include the processId in the logs.
formatter: new DefaultFormatter({
colorize: true // Tell the formatter to colorize the output.
})
})
]
});
var x = 200;
// The first argument is always the "message", all following arguments should containg extra info.
log.warn('This is a warning message', { someKey: 'avalue' }, x);
Custom transports and formatters
Transports and formatters are simple objects. Creating a custom transport or formatter is easy.
Transports must have a write
function and a level
property (being one of the log levels or an array of log levels).
A formatter must have a format
function.
Here is an example of a custom transport with a custom formatter:
function MyFormatter (options) {
this.colorize = options.colorize || false;
}
MyFormatter.prototype.format = function (logObject) {
var formattedLogObject = logObject.namespace + ': ' + logObject.message;
if (this.colorize) {
formattedLogObject = exampleColorFunction(formattedLogObject);
}
return formattedLogObject;
};
function CustomTransport (options) {
if (!options.formatter) {
throw new Error('CustomTransport transporter has no formatter.');
}
this.level = options.level || 'trace' // Default to "trace" level
this.formatter = options.formatter;
}
CustomTransport.prototype.write = function (logObject) {
// Write the logObject somewhere.
console.log(this.formatter.format(logObject));
}
// Set up loggert;
var log = require('loggert');
log.setConfig({
transports: [
new CustomTransport({
formatter: new MyFormatter({
colorize: true
})
})
]
});
Namespaces
Each time loggert is required, a namespace can be defined. The namespace will be added as a prefix to messages. For example:
// webservice.js
var log = require('loggert')('webservice-example');
// database.js
var log = require('loggert')('database-example');
Log levels
There are 6 log levels available. These are functions on the loggert
instance.
trace
is the lowest level, fatal
is the highest level.
- trace
- debug
- info
- warn
- error
- fatal