From dade81d18df7d550db871f9e76e28483d93f0cf0 Mon Sep 17 00:00:00 2001 From: Nathan Rajlich Date: Tue, 27 Dec 2016 16:25:36 -0800 Subject: [PATCH] Remove DEBUG_FD (#406) * remove DEBUG_FD Now simply uses `process.stderr`. Breaking API change, for the v3 branch. Previously used internal and undocumented Node.js APIs to support this underly used API. Fixes #280 Closes #386 * remove DEBUG_FD from readme --- README.md | 19 ++---------- src/node.js | 86 ++--------------------------------------------------- 2 files changed, 5 insertions(+), 100 deletions(-) diff --git a/README.md b/README.md index 75dcabb8..48dd9235 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,6 @@ Then, run the program to be debugged as usual. |-----------|-------------------------------------------------| | `DEBUG` | Enables/disabled specific debugging namespaces. | | `DEBUG_COLORS`| Whether or not to use colors in the debug output. | -| `DEBUG_FD`| File descriptor to output debug logs to. Defaults to stderr. | | `DEBUG_DEPTH` | Object inspection depth. | | `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. | @@ -110,8 +109,6 @@ Then, run the program to be debugged as usual. [`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options) for the complete list. - __Note:__ Certain IDEs (such as WebStorm) don't support colors on stderr. In these cases you must set `DEBUG_COLORS` to `1` and additionally change `DEBUG_FD` to `1`. - ## Formatters @@ -181,13 +178,10 @@ setInterval(function(){ ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png) -## Output streams - -### stderr vs stdout - By default `debug` will log to stderr, however this can be changed by setting the environment variable `DEBUG_FD` to `1` for stdout and `2` for stderr (the default value). +## Output streams -You can also set an alternative logging method per-namespace by overriding the `log` method on a per-namespace or globally: + By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method: Example _stdout.js_: @@ -211,15 +205,6 @@ error('now goes to stdout via console.info'); log('still goes to stdout, but via console.info now'); ``` -### Save debug output to a file - -You can save all debug statements to a file by piping them. - -Example: - -```bash -$ DEBUG_FD=3 node your-app.js 3> whatever.log -``` ## Authors diff --git a/src/node.js b/src/node.js index 15bf55af..6c33c8ef 100644 --- a/src/node.js +++ b/src/node.js @@ -51,18 +51,6 @@ exports.inspectOpts = Object.keys(process.env).filter(function (key) { return obj; }, {}); -/** - * The file descriptor to write the `debug()` calls to. - * Set the `DEBUG_FD` env variable to override with another value. i.e.: - * - * $ DEBUG_FD=3 node script.js 3>debug.log - */ - -var fd = parseInt(process.env.DEBUG_FD, 10) || 2; -var stream = 1 === fd ? process.stdout : - 2 === fd ? process.stderr : - createWritableStdioStream(fd); - /** * Is stdout a TTY? Colored output is enabled when `true`. */ @@ -70,7 +58,7 @@ var stream = 1 === fd ? process.stdout : function useColors() { return 'colors' in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) - : tty.isatty(fd); + : tty.isatty(process.stderr.fd); } /** @@ -115,11 +103,11 @@ function formatArgs(args) { } /** - * Invokes `util.format()` with the specified arguments and writes to `stream`. + * Invokes `util.format()` with the specified arguments and writes to stderr. */ function log() { - return stream.write(util.format.apply(util, arguments) + '\n'); + return process.stderr.write(util.format.apply(util, arguments) + '\n'); } /** @@ -150,74 +138,6 @@ function load() { return process.env.DEBUG; } -/** - * Copied from `node/src/node.js`. - * - * XXX: It's lame that node doesn't expose this API out-of-the-box. It also - * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. - */ - -function createWritableStdioStream (fd) { - var stream; - var tty_wrap = process.binding('tty_wrap'); - - // Note stream._type is used for test-module-load-list.js - - switch (tty_wrap.guessHandleType(fd)) { - case 'TTY': - stream = new tty.WriteStream(fd); - stream._type = 'tty'; - - // Hack to have stream not keep the event loop alive. - // See https://github.com/joyent/node/issues/1726 - if (stream._handle && stream._handle.unref) { - stream._handle.unref(); - } - break; - - case 'FILE': - var fs = require('fs'); - stream = new fs.SyncWriteStream(fd, { autoClose: false }); - stream._type = 'fs'; - break; - - case 'PIPE': - case 'TCP': - var net = require('net'); - stream = new net.Socket({ - fd: fd, - readable: false, - writable: true - }); - - // FIXME Should probably have an option in net.Socket to create a - // stream from an existing fd which is writable only. But for now - // we'll just add this hack and set the `readable` member to false. - // Test: ./node test/fixtures/echo.js < /etc/passwd - stream.readable = false; - stream.read = null; - stream._type = 'pipe'; - - // FIXME Hack to have stream not keep the event loop alive. - // See https://github.com/joyent/node/issues/1726 - if (stream._handle && stream._handle.unref) { - stream._handle.unref(); - } - break; - - default: - // Probably an error on in uv_guess_handle() - throw new Error('Implement me. Unknown stream file type!'); - } - - // For supporting legacy API we put the FD here. - stream.fd = fd; - - stream._isStdio = true; - - return stream; -} - /** * Init logic for `debug` instances. *