尝试在终端上格式化节点网络套件控制台输出



node-webkit相当新,所以我仍在弄清楚一切是如何工作的......

我的应用程序中有一些登录:

console.log("Name: %s", this.name);

它按预期输出到浏览器控制台:

Name: Foo

但是在调用终端中,相反,我得到了一些相当丑陋的输出:

[7781:1115/085317:INFO:CONSOLE(43)] ""Name: %s" "Foo"", source: /file/path/to/test.js (43)

括号内的数字输出可能有用,但我不知道如何解释它。 源信息很好。 但我真的希望打印的字符串采用 printf 样式的格式,而不是显示为单个参数。

那么,有没有办法让 stdout 以不同的方式格式化,或者调用某种自定义输出函数,以便我可以输出我想要的信息?

我最终放弃了,并用以下内容包装了console.log():

log = function() {
   console.log(util.format.apply(this, arguments));
}

实际的终端控制台输出是通过 chromium 中的RenderFrameHostImpl::OnAddMessageToConsole完成的,前缀信息通过 LogMessage::Init() 生成,格式如下:

[pid:MMDD/HHMMSS:severity:filename(line)]

javascript console.log 是通过 Log() 函数在 console.cc 中实现的。printf 样式格式设置是在更高级别完成的,因此在调用 Log() 函数(或类似函数)时,它们只传递一个字符串。

这不是一个令人满意的答案,而是一个可以容忍的解决方法。

我正在寻找一个命令行界面来配合我的 UI,但遇到了类似的问题。除了不按我想要的方式记录值外,我还想摆脱 [pid:MMDD/HHMMSS:severity:filename(line)] 输出前缀,所以我添加了以下内容:

console.log = function (d) {
  process.stdout.write(d + 'n');
};

因此,控制台日志记录被设置回 stdout,没有额外的详细信息。不幸的是,这也是一种解决方法。

最新更新