尝试在终端上格式化node-webkit控制台输出

时间:2014-11-15 14:31:56

标签: webkit node-webkit

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以不同的方式格式化,或者调用某种自定义输出函数以便输出我想要的信息?

2 个答案:

答案 0 :(得分:0)

我最终放弃了,并用:

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

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

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

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

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

答案 1 :(得分:0)

我一直在寻找创建一个命令行界面来跟我的UI一起出现类似的问题。除了没有记录我想要的值,我还想摆脱[pid:MMDD / HHMMSS:severity:filename(line)]输出前缀,所以我添加了以下内容:

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

以便将控制台日志记录设置回stdout而无需额外的详细信息。不幸的是还有一个工作。