util: allow wildcards in NODE_DEBUG variable
PR-URL: https://github.com/nodejs/node/pull/17609 Fixes: https://github.com/nodejs/node/issues/17605 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com>
This commit is contained in:
parent
a6788b407b
commit
fafd9fbd01
@ -104,6 +104,19 @@ FOO 3245: hello from foo [123]
|
||||
where `3245` is the process id. If it is not run with that
|
||||
environment variable set, then it will not print anything.
|
||||
|
||||
The `section` supports wildcard also, for example:
|
||||
```js
|
||||
const util = require('util');
|
||||
const debuglog = util.debuglog('foo-bar');
|
||||
|
||||
debuglog('hi there, it\'s foo-bar [%d]', 2333);
|
||||
```
|
||||
|
||||
if it is run with `NODE_DEBUG=foo*` in the environment, then it will output something like:
|
||||
```txt
|
||||
FOO-BAR 3257: hi there, it's foo-bar [2333]
|
||||
```
|
||||
|
||||
Multiple comma-separated `section` names may be specified in the `NODE_DEBUG`
|
||||
environment variable. For example: `NODE_DEBUG=fs,net,tls`.
|
||||
|
||||
|
18
lib/util.js
18
lib/util.js
@ -230,17 +230,21 @@ function format(f) {
|
||||
return str;
|
||||
}
|
||||
|
||||
var debugs = {};
|
||||
var debugEnviron;
|
||||
const debugs = {};
|
||||
let debugEnvRegex = /^$/;
|
||||
if (process.env.NODE_DEBUG) {
|
||||
let debugEnv = process.env.NODE_DEBUG;
|
||||
debugEnv = debugEnv.replace(/[|\\{}()[\]^$+?.]/g, '\\$&')
|
||||
.replace(/\*/g, '.*')
|
||||
.replace(/,/g, '$|^')
|
||||
.toUpperCase();
|
||||
debugEnvRegex = new RegExp(`^${debugEnv}$`, 'i');
|
||||
}
|
||||
|
||||
function debuglog(set) {
|
||||
if (debugEnviron === undefined) {
|
||||
debugEnviron = new Set(
|
||||
(process.env.NODE_DEBUG || '').split(',').map((s) => s.toUpperCase()));
|
||||
}
|
||||
set = set.toUpperCase();
|
||||
if (!debugs[set]) {
|
||||
if (debugEnviron.has(set)) {
|
||||
if (debugEnvRegex.test(set)) {
|
||||
var pid = process.pid;
|
||||
debugs[set] = function() {
|
||||
var msg = exports.format.apply(exports, arguments);
|
||||
|
@ -43,6 +43,15 @@ function parent() {
|
||||
test('f$oo', true, 'f$oo');
|
||||
test('f$oo', false, 'f.oo');
|
||||
test('no-bar-at-all', false, 'bar');
|
||||
|
||||
test('test-abc', true, 'test-abc');
|
||||
test('test-a', false, 'test-abc');
|
||||
test('test-*', true, 'test-abc');
|
||||
test('test-*c', true, 'test-abc');
|
||||
test('test-*abc', true, 'test-abc');
|
||||
test('abc-test', true, 'abc-test');
|
||||
test('a*-test', true, 'abc-test');
|
||||
test('*-test', true, 'abc-test');
|
||||
}
|
||||
|
||||
function test(environ, shouldWrite, section) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user