Create a gist now

Instantly share code, notes, and snippets.

using node's process to emit events to log stuff from anywhere
// use like this:
// process.emit( 'app:log', module, arg1, arg2, ..., argN );
var Module = require('module');
function logConsole(method, module) {
var args = [(new Date()).toJSON(), method];
var index = 1;
if (module instanceof Module) {
args.push(module.id);
index = 2;
}
args.push.apply(args, Array.prototype.slice.call(arguments, index));
console.log.apply(console, args);
}
['debug', 'error', 'info', 'log', 'warn'].forEach( function(consoleMethod) {
process.on('app:' + consoleMethod, logConsole.bind(null, consoleMethod.toUpperCase()));
} );
@constantology
Owner

this was jeffwad's original idea

@iancrowther

nice

@RangerMauve

This should be on NPM.

@mscdex
mscdex commented Jul 24, 2014

FWIW you should avoid Array.prototype.slice.call(arguments, index) style calls if you care about performance since that will make logConsole unoptimizable by v8. Creating a new array and appending to it in a for-loop will avoid this deoptimization.

@dougwilson

The module depd will emit deprecation events on process if there is a listener, automatically suppressing output to STDERR for centralized logging in mind similar to this.

@ketansp
ketansp commented Mar 22, 2017

Can you please specify which versions of node are supported? I cant get it working in 6.6.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment