控制台在 Nodejs 中没有方法 'debug'?

Console has no method 'debug' in Nodejs?

可以在浏览器控制台中调用console.debug()函数。

但是在Nodejs中调用console.debug()时出现一处错误

TypeError: Object #<Console> has no method 'debug'
    at Object.<anonymous> (c:\share\node\receive.js:20:9)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:929:3

为什么?有什么办法可以替换 Nodejs 中的 console.debug 吗?

NodeJS 中没有 console.debug() 方法。 Here 是控制台对象的文档,因此您可以选择最适合您的方法来使用。

正如前面的回答所述,node.js 中没有 console.debug() 方法。使用日志、信息、警告、错误方法 https://nodejs.org/api/console.html

也就是说,您可能需要扩展控制台对象以包含 console.debug() 方法,并且仅在调试模式下使用此方法打印控制台消息。

var isDebugMode = true;

console.debug = function(args)
{
  if (isDebugMode){
    console.log(args);
  }
}

添加到@maninvan 的回答中,我将使用变量 args 语法:

var isDebugMode = true;

console.debug = function(/* ...args */) {
    if(isDebugMode) {
        var vargs = Array.prototype.slice.call(arguments);
        console.log.apply(this, vargs);
    }
}

// or ES6 style
console.debug = (...args) => {
    if(isDebugMode) {
        console.log.apply(this, args)
    }
}

因为节点 9.3.0 console.debug 现在默认显示在标准输出中。


旧解决方案:

console.debug() 已添加到节点 v8.0.0 中,但通常不会打印到标准输出。

您可以使用 --inspect--inspect-brk 命令行标志并使用开发工具控制台选项卡中的 "levels" 下拉菜单启用详细日志记录来查看 console.debug 消息。

不幸的是,这并没有消除 console.debug 到标准输出的输出。

从节点 v9.2.0 开始,除了用 console.log 包装器替换函数外,我不知道有什么方法可以在标准输出中查看 console.debug 的输出。

已为 console.debug()

添加了节点 8.10.0 及更高版本的支持

https://github.com/nodejs/node/commit/162ff56439

正如 documentation 历史所说:

v8.10.0 console.debug is now an alias for console.log

虽然用您自己的函数覆盖它很容易,但我更喜欢扩展 console 并使用我自己的 debug 方法,如本例所示:

xconsole = Object.create(console);

xconsole.debug = function (...line) {
        if (process.env.NODE_ENV === "development") {
                console.log(...line);
        }
}

这使得 console.debug 保持不变。我在自己的文件中有这个,我 可以在其他模块中使用它。我可以改用新函数,如下所示:

xconsole.debug("This will only show if NODE_ENV is set to development");
xconsole.log("This will always show");

当然,可以有很多变化。请参阅 NODE_ENV 上的 info

我使用这种方法方便地在 docker 容器上启用调试模式。我在 ~/.bashrcpropagate the environment variables 上有一个别名,因为我需要 运行 docker 和 sudo:

alias docker='sudo -E docker'

如果我需要启用调试模式,它就像 export NODE_ENV=development 一样简单。测试:

docker run --name test -d -e NODE_ENV node:17-bullseye env

我可以看到 NODE_ENV=developmentdocker logs testexporting environment variables to root(-E)的时候注意安全就好了,不过这对我的开发环境来说没问题。