Search code examples
webkitnode-webkit

Trying to get node-webkit console output formatted on terminal


Fairly new to node-webkit, so I'm still figuring out how everything works...

I have some logging in my app:

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

It outputs to the browser console as expected:

Name: Foo

But in the invoking terminal, instead I get some fairly ugly output:

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

The numerical output within the brackets might be useful, but I don't know how to interpret it. The source info is fine. But I'd really like the printed string to be printf-style formatted, rather than shown as individual arguments.

So, is there a way to get stdout to be formatted either differently, or to call a custom output function of some sort so I can output the information I want?


Solution

  • I eventually gave up, and wrapped console.log() with:

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

    The actual terminal console output is done via RenderFrameHostImpl::OnAddMessageToConsole in chromium, with the prefix info being generated via LogMessage::Init() in the format:

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

    The javascript console.log is implemented in console.cc, via the Log() function. The printf style formatting is being done at a higher level, so that by the time the Log() function (or similar) are called, they are only passed a single string.

    It's not a satisfying answer, but a tolerable workaround.