diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js index 1b6f2175ceb937..34118f4fbee031 100644 --- a/lib/_stream_readable.js +++ b/lib/_stream_readable.js @@ -30,14 +30,7 @@ const EE = require('events'); const Stream = require('stream'); const { Buffer } = require('buffer'); -let debuglog; -function debug(...args) { - if (!debuglog) { - debuglog = require('internal/util/debuglog').debuglog('stream'); - } - debuglog(...args); -} - +const debug = require('internal/util/debuglog').debuglog('stream'); const BufferList = require('internal/streams/buffer_list'); const destroyImpl = require('internal/streams/destroy'); const { getHighWaterMark } = require('internal/streams/state'); diff --git a/lib/internal/main/worker_thread.js b/lib/internal/main/worker_thread.js index a06fda7a59cd87..dd6a9426fffc1e 100644 --- a/lib/internal/main/worker_thread.js +++ b/lib/internal/main/worker_thread.js @@ -44,6 +44,7 @@ const { } = require('internal/process/execution'); const publicWorker = require('worker_threads'); +const debug = require('internal/util/debuglog').debuglog('worker'); const assert = require('internal/assert'); @@ -51,8 +52,6 @@ patchProcessObject(); setupInspectorHooks(); setupDebugEnv(); -const debug = require('internal/util/debuglog').debuglog('worker'); - setupWarningHandler(); // Since worker threads cannot switch cwd, we do not need to diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index 16940aa0c29845..20ca6d113c0071 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -166,14 +166,7 @@ Object.defineProperty(Module, 'wrapper', { } }); -let debuglog; -function debug(...args) { - if (!debuglog) { - debuglog = require('internal/util/debuglog').debuglog('module'); - } - debuglog(...args); -} - +const debug = require('internal/util/debuglog').debuglog('module'); Module._debug = deprecate(debug, 'Module._debug is deprecated.', 'DEP0077'); // Given a module name, and a list of paths to test, returns the first diff --git a/lib/internal/stream_base_commons.js b/lib/internal/stream_base_commons.js index 50eac42772324f..88896083f1951b 100644 --- a/lib/internal/stream_base_commons.js +++ b/lib/internal/stream_base_commons.js @@ -31,7 +31,7 @@ const kAfterAsyncWrite = Symbol('kAfterAsyncWrite'); const kHandle = Symbol('kHandle'); const kSession = Symbol('kSession'); -const debug = require('util').debuglog('stream'); +const debug = require('internal/util/debuglog').debuglog('stream'); function handleWriteReq(req, data, encoding) { const { handle } = req; diff --git a/lib/internal/timers.js b/lib/internal/timers.js index aef099b4b997f9..566d7df0365389 100644 --- a/lib/internal/timers.js +++ b/lib/internal/timers.js @@ -107,13 +107,7 @@ const L = require('internal/linkedlist'); const PriorityQueue = require('internal/priority_queue'); const { inspect } = require('internal/util/inspect'); -let debuglog; -function debug(...args) { - if (!debuglog) { - debuglog = require('internal/util/debuglog').debuglog('timer'); - } - debuglog(...args); -} +const debug = require('internal/util/debuglog').debuglog('timer'); // *Must* match Environment::ImmediateInfo::Fields in src/env.h. const kCount = 0; diff --git a/lib/internal/util/debuglog.js b/lib/internal/util/debuglog.js index e92f3ad2bd5b98..11de25b6b436a0 100644 --- a/lib/internal/util/debuglog.js +++ b/lib/internal/util/debuglog.js @@ -31,7 +31,7 @@ function emitWarningIfNeeded(set) { } } -function debuglog(set) { +function debuglogImpl(set) { set = set.toUpperCase(); if (!debugs[set]) { if (debugEnvRegex.test(set)) { @@ -48,6 +48,22 @@ function debuglog(set) { return debugs[set]; } +// debuglogImpl depends on process.pid and process.env.NODE_DEBUG, +// so it needs to be called lazily in top scopes of internal modules +// that may be loaded before these run time states are allowed to +// be accessed. +function debuglog(set) { + let debug; + return function(...args) { + if (!debug) { + // Only invokes debuglogImpl() when the debug function is + // called for the first time. + debug = debuglogImpl(set); + } + debug(...args); + }; +} + module.exports = { debuglog, initializeDebugEnv diff --git a/lib/internal/worker.js b/lib/internal/worker.js index 796d1713dd510a..e9d961f35a0a71 100644 --- a/lib/internal/worker.js +++ b/lib/internal/worker.js @@ -48,14 +48,7 @@ const kOnErrorMessage = Symbol('kOnErrorMessage'); const kParentSideStdio = Symbol('kParentSideStdio'); const SHARE_ENV = Symbol.for('nodejs.worker_threads.SHARE_ENV'); - -let debuglog; -function debug(...args) { - if (!debuglog) { - debuglog = require('internal/util/debuglog').debuglog('worker'); - } - debuglog(...args); -} +const debug = require('internal/util/debuglog').debuglog('worker'); class Worker extends EventEmitter { constructor(filename, options = {}) { diff --git a/lib/internal/worker/io.js b/lib/internal/worker/io.js index 04f8f9ad5974d4..8b7aedd39d0079 100644 --- a/lib/internal/worker/io.js +++ b/lib/internal/worker/io.js @@ -21,14 +21,7 @@ const { const { Readable, Writable } = require('stream'); const EventEmitter = require('events'); const { inspect } = require('internal/util/inspect'); - -let debuglog; -function debug(...args) { - if (!debuglog) { - debuglog = require('internal/util/debuglog').debuglog('worker'); - } - debuglog(...args); -} +const debug = require('internal/util/debuglog').debuglog('worker'); const kIncrementsPortRef = Symbol('kIncrementsPortRef'); const kName = Symbol('kName'); diff --git a/lib/timers.js b/lib/timers.js index 85801face55b97..ddce43e7491795 100644 --- a/lib/timers.js +++ b/lib/timers.js @@ -50,14 +50,7 @@ const { deprecate } = require('internal/util'); const { ERR_INVALID_CALLBACK } = require('internal/errors').codes; - -let debuglog; -function debug(...args) { - if (!debuglog) { - debuglog = require('internal/util/debuglog').debuglog('timer'); - } - debuglog(...args); -} +const debug = require('internal/util/debuglog').debuglog('timer'); const { destroyHooksExist,