From 896b2aa7074fc886efd7dd0a397d694763cac7ce Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 21 May 2013 15:22:05 -0700 Subject: util: Add debuglog, deprecate console lookalikes --- lib/_http_client.js | 4 +- lib/_http_common.js | 7 +-- lib/module.js | 7 +-- lib/net.js | 15 +---- lib/timers.js | 15 ++--- lib/tls.js | 28 ++++----- lib/util.js | 167 +++++++++++++++++++++++++++++----------------------- 7 files changed, 114 insertions(+), 129 deletions(-) (limited to 'lib') diff --git a/lib/_http_client.js b/lib/_http_client.js index 71f5c335d0..339a5c785d 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -205,7 +205,7 @@ function socketErrorListener(err) { var socket = this; var parser = socket.parser; var req = socket._httpMessage; - debug('HTTP SOCKET ERROR: ' + err.message + '\n' + err.stack); + debug('SOCKET ERROR:', err.message, err.stack); if (req) { req.emit('error', err); @@ -325,7 +325,7 @@ function parserOnIncomingClient(res, shouldKeepAlive) { // to the content-length of the entity-body had the request // been a GET. var isHeadResponse = req.method == 'HEAD'; - debug('AGENT isHeadResponse ' + isHeadResponse); + debug('AGENT isHeadResponse', isHeadResponse); if (res.statusCode == 100) { // restart the parser, as this is a continue message. diff --git a/lib/_http_common.js b/lib/_http_common.js index 8c97886272..1ed8abc8c6 100644 --- a/lib/_http_common.js +++ b/lib/_http_common.js @@ -28,12 +28,7 @@ var readStart = incoming.readStart; var readStop = incoming.readStop; -var debug; -if (process.env.NODE_DEBUG && /http/.test(process.env.NODE_DEBUG)) { - debug = function(x) { console.error('HTTP: %s', x); }; -} else { - debug = function() { }; -} +var debug = require('util').debuglog('http'); exports.debug = debug; exports.CRLF = '\r\n'; diff --git a/lib/module.js b/lib/module.js index f98a42610f..d34ce10f15 100644 --- a/lib/module.js +++ b/lib/module.js @@ -62,12 +62,7 @@ Module.wrap = NativeModule.wrap; var path = NativeModule.require('path'); -Module._debug = function() {}; -if (process.env.NODE_DEBUG && /module/.test(process.env.NODE_DEBUG)) { - Module._debug = function(x) { - console.error(x); - }; -} +Module._debug = NativeModule.require('util').debuglog('module'); // We use this alias for the preprocessor that filters it out diff --git a/lib/net.js b/lib/net.js index c1d9bb6c0a..e248bdfb3c 100644 --- a/lib/net.js +++ b/lib/net.js @@ -51,20 +51,7 @@ function createHandle(fd) { } -var debug; -if (process.env.NODE_DEBUG && /net/.test(process.env.NODE_DEBUG)) { - var pid = process.pid; - debug = function(x) { - // if console is not set up yet, then skip this. - if (!console.error) - return; - console.error('NET: %d', pid, - util.format.apply(util, arguments).slice(0, 500)); - }; -} else { - debug = function() { }; -} - +var debug = util.debuglog('net'); function isPipeName(s) { return typeof s === 'string' && toNumber(s) === false; diff --git a/lib/timers.js b/lib/timers.js index 708f0af16e..2b0745c5a4 100644 --- a/lib/timers.js +++ b/lib/timers.js @@ -26,12 +26,7 @@ var assert = require('assert').ok; // Timeout values > TIMEOUT_MAX are set to 1. var TIMEOUT_MAX = 2147483647; // 2^31-1 -var debug; -if (process.env.NODE_DEBUG && /timer/.test(process.env.NODE_DEBUG)) { - debug = function() { require('util').error.apply(this, arguments); }; -} else { - debug = function() { }; -} +var debug = require('util').debuglog('timer'); // IDLE TIMEOUTS @@ -78,17 +73,17 @@ function listOnTimeout() { var msecs = this.msecs; var list = this; - debug('timeout callback ' + msecs); + debug('timeout callback %d', msecs); var now = Date.now(); - debug('now: ' + now); + debug('now: %s', now); var first; while (first = L.peek(list)) { var diff = now - first._idleStart; if (diff < msecs) { list.start(msecs - diff, 0); - debug(msecs + ' list wait because diff is ' + diff); + debug('%d list wait because diff is %d', msecs, diff); return; } else { L.remove(first); @@ -121,7 +116,7 @@ function listOnTimeout() { } } - debug(msecs + ' list empty'); + debug('%d list empty', msecs); assert(L.isEmpty(list)); list.close(); delete lists[msecs]; diff --git a/lib/tls.js b/lib/tls.js index c0b59d99b7..3af078a966 100644 --- a/lib/tls.js +++ b/lib/tls.js @@ -52,13 +52,7 @@ exports.getCiphers = function() { }; -var debug; -if (process.env.NODE_DEBUG && /tls/.test(process.env.NODE_DEBUG)) { - debug = function(a) { console.error('TLS:', a); }; -} else { - debug = function() { }; -} - +var debug = util.debuglog('tls'); var Connection = null; try { @@ -328,10 +322,10 @@ CryptoStream.prototype._write = function write(data, encoding, cb) { // Write current buffer now var written; if (this === this.pair.cleartext) { - debug('cleartext.write called with ' + data.length + ' bytes'); + debug('cleartext.write called with %d bytes', data.length); written = this.pair.ssl.clearIn(data, 0, data.length); } else { - debug('encrypted.write called with ' + data.length + ' bytes'); + debug('encrypted.write called with %d bytes', data.length); written = this.pair.ssl.encIn(data, 0, data.length); } @@ -354,9 +348,9 @@ CryptoStream.prototype._write = function write(data, encoding, cb) { // Whole buffer was written if (written === data.length) { if (this === this.pair.cleartext) { - debug('cleartext.write succeed with ' + data.length + ' bytes'); + debug('cleartext.write succeed with %d bytes', data.length); } else { - debug('encrypted.write succeed with ' + data.length + ' bytes'); + debug('encrypted.write succeed with %d bytes', data.length); } return cb(null); @@ -375,9 +369,9 @@ CryptoStream.prototype._write = function write(data, encoding, cb) { this._pendingCallback = cb; if (this === this.pair.cleartext) { - debug('cleartext.write queued with ' + data.length + ' bytes'); + debug('cleartext.write queued with %d bytes', data.length); } else { - debug('encrypted.write queued with ' + data.length + ' bytes'); + debug('encrypted.write queued with %d bytes', data.length); } }; @@ -404,10 +398,10 @@ CryptoStream.prototype._read = function read(size) { var out; if (this === this.pair.cleartext) { - debug('cleartext.read called with ' + size + ' bytes'); + debug('cleartext.read called with %d bytes', size); out = this.pair.ssl.clearOut; } else { - debug('encrypted.read called with ' + size + ' bytes'); + debug('encrypted.read called with %d bytes', size); out = this.pair.ssl.encOut; } @@ -437,9 +431,9 @@ CryptoStream.prototype._read = function read(size) { assert(bytesRead >= 0); if (this === this.pair.cleartext) { - debug('cleartext.read succeed with ' + bytesRead + ' bytes'); + debug('cleartext.read succeed with %d bytes', bytesRead); } else { - debug('encrypted.read succeed with ' + bytesRead + ' bytes'); + debug('encrypted.read succeed with %d bytes', bytesRead); } // Try writing pending data diff --git a/lib/util.js b/lib/util.js index 58c7312c95..4f9d06943e 100644 --- a/lib/util.js +++ b/lib/util.js @@ -81,29 +81,22 @@ exports.deprecate = function(fn, msg) { }; -exports.print = function() { - for (var i = 0, len = arguments.length; i < len; ++i) { - process.stdout.write(String(arguments[i])); - } -}; - - -exports.puts = function() { - for (var i = 0, len = arguments.length; i < len; ++i) { - process.stdout.write(arguments[i] + '\n'); - } -}; - - -exports.debug = function(x) { - process.stderr.write('DEBUG: ' + x + '\n'); -}; - - -var error = exports.error = function(x) { - for (var i = 0, len = arguments.length; i < len; ++i) { - process.stderr.write(arguments[i] + '\n'); +var debugs = {}; +var debugEnviron = process.env.NODE_DEBUG || ''; +exports.debuglog = function(set) { + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } } + return debugs[set]; }; @@ -466,13 +459,6 @@ function objectToString(o) { } -exports.p = exports.deprecate(function() { - for (var i = 0, len = arguments.length; i < len; ++i) { - error(exports.inspect(arguments[i])); - } -}, 'util.p: Use console.error() instead.'); - - function pad(n) { return n < 10 ? '0' + n.toString(10) : n.toString(10); } @@ -497,51 +483,6 @@ exports.log = function() { }; -exports.exec = exports.deprecate(function() { - return require('child_process').exec.apply(this, arguments); -}, 'util.exec is now called `child_process.exec`.'); - - -function pump(readStream, writeStream, callback) { - var callbackCalled = false; - - function call(a, b, c) { - if (callback && !callbackCalled) { - callback(a, b, c); - callbackCalled = true; - } - } - - readStream.addListener('data', function(chunk) { - if (writeStream.write(chunk) === false) readStream.pause(); - }); - - writeStream.addListener('drain', function() { - readStream.resume(); - }); - - readStream.addListener('end', function() { - writeStream.end(); - }); - - readStream.addListener('close', function() { - call(); - }); - - readStream.addListener('error', function(err) { - writeStream.end(); - call(err); - }); - - writeStream.addListener('error', function(err) { - readStream.destroy(); - call(err); - }); -} -exports.pump = exports.deprecate(pump, - 'util.pump() is deprecated. Use readableStream.pipe() instead.'); - - /** * Inherit the prototype methods from one constructor into another. * @@ -582,3 +523,81 @@ exports._extend = function(origin, add) { function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } + + +// Deprecated old stuff. + +exports.p = exports.deprecate(function() { + for (var i = 0, len = arguments.length; i < len; ++i) { + console.error(exports.inspect(arguments[i])); + } +}, 'util.p: Use console.error() instead'); + + +exports.exec = exports.deprecate(function() { + return require('child_process').exec.apply(this, arguments); +}, 'util.exec is now called `child_process.exec`.'); + + +exports.print = exports.deprecate(function() { + for (var i = 0, len = arguments.length; i < len; ++i) { + process.stdout.write(String(arguments[i])); + } +}, 'util.print: Use console.log instead'); + + +exports.puts = exports.deprecate(function() { + for (var i = 0, len = arguments.length; i < len; ++i) { + process.stdout.write(arguments[i] + '\n'); + } +}, 'util.puts: Use console.log instead'); + + +exports.debug = exports.deprecate(function(x) { + process.stderr.write('DEBUG: ' + x + '\n'); +}, 'util.debug: Use console.error instead'); + + +exports.error = exports.deprecate(function(x) { + for (var i = 0, len = arguments.length; i < len; ++i) { + process.stderr.write(arguments[i] + '\n'); + } +}, 'util.error: Use console.error instead'); + + +exports.pump = exports.deprecate(function(readStream, writeStream, callback) { + var callbackCalled = false; + + function call(a, b, c) { + if (callback && !callbackCalled) { + callback(a, b, c); + callbackCalled = true; + } + } + + readStream.addListener('data', function(chunk) { + if (writeStream.write(chunk) === false) readStream.pause(); + }); + + writeStream.addListener('drain', function() { + readStream.resume(); + }); + + readStream.addListener('end', function() { + writeStream.end(); + }); + + readStream.addListener('close', function() { + call(); + }); + + readStream.addListener('error', function(err) { + writeStream.end(); + call(err); + }); + + writeStream.addListener('error', function(err) { + readStream.destroy(); + call(err); + }); +}, 'util.pump(): Use readableStream.pipe() instead'); -- cgit v1.2.3