public
Last active

A console.log implementation that plays "nice" with large amounts of data. It Keeps node alive until the output has flushed to the screen.

  • Download Gist
.gitignore
1 2
gmon.out
v8.log
README.md
Markdown

Install

npm install console.log

Usage

require('console.log') and go about your day

How it works

Simple, node will stay alive until there are no callbacks left in the queue. Assuming the application is not forcibly terminated (i.e. ^C, killall -9 node, etc...) it will run until all of the data passed to console.log has been flushed to the terminal

console.log.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
/*
A console.log that won't leave you hanging when node exits
90% of this file was ripped from node.js
 
License: see: https://github.com/joyent/node/blob/master/lib/console.js
*/
 
// console object
var formatRegExp = /%[sdj]/g;
function format(f) {
var util = require('util');
 
if (typeof f !== 'string') {
var objects = [];
for (var i = 0; i < arguments.length; i++) {
objects.push(util.inspect(arguments[i]));
}
return objects.join(' ');
}
 
 
var i = 1;
var args = arguments;
var str = String(f).replace(formatRegExp, function(x) {
switch (x) {
case '%s': return String(args[i++]);
case '%d': return Number(args[i++]);
case '%j': return JSON.stringify(args[i++]);
default:
return x;
}
});
for (var len = args.length, x = args[i]; i < len; x = args[++i]) {
if (x === null || typeof x !== 'object') {
str += ' ' + x;
} else {
str += ' ' + util.inspect(x);
}
}
return str;
}
 
console.log = function() {
var res = process.stdout.write(format.apply(this, arguments) + '\n');
 
// this is the first time stdout got backed up
if (!res && !process.stdout.pendingWrite) {
process.stdout.pendingWrite = true;
 
// magic sauce: keep node alive until stdout has flushed
process.stdout.once('drain', function () {
process.stdout.pendingWrite = false;
});
}
};
package.json
JSON
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
{
"author": "Elijah Insua <tmpvar@gmail.com> (http://tmpvar.com)",
"name": "console.log",
"description": "A console.log implementation that plays *nice* with large amounts of data. It Keeps node alive until the output has flushed to the screen.",
"version": "0.1.3",
"homepage": "https://gist.github.com/1077544",
"repository": {
"type": "git",
"url": "git://gist.github.com/1077544.git"
},
"main": "console.log.js",
"engines": {
"node": "*"
},
"dependencies": {},
"devDependencies": {}
}

I'd consider this a node bug. You should try to get this merged into core.

yeah.. I need it now though. Pull request forthcoming.

https://github.com/joyent/node/pull/1312 -- new version to npm with the code that actually exists in node's console.log

How does this module have access to the format function?

it does not, thanks! fixed and pushed to npm (0.1.2)

Hi there. It would be awesome from a distribution packaging point of view if you could include the full text of the MIT license in your software, usually in a file called LICENSE.

Thanks!

Has this node bug been fixed? The ticket I see for it is closed but the patch was rejected:

https://github.com/joyent/node/pull/1312

I'm fixing some old code (nodeunit) that relies on this behavior, and want to make sure it's safe to remove before I do.

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.