[Win] Override node's console and output stream with chromium's logging.

On Window node doesn't outputing as GUI program, so we have to switch to
chromium's implementation. Hacking into node (like what we did before
this commit) would sometimes make the outputing blocked.
This commit is contained in:
Cheng Zhao 2013-07-25 20:06:23 +08:00
parent a163b148ce
commit 2f2cbce9b9
3 changed files with 18 additions and 0 deletions

View file

@ -1,6 +1,12 @@
fs = require 'fs' fs = require 'fs'
path = require 'path' path = require 'path'
# Redirect node's console to use our own implementations, since node can not
# handle output when running as GUI program.
if process.platform is 'win32'
console.log = console.error = console.warn = process.log
process.stdout.write = process.stderr.write = process.log
# Enable idle gc. # Enable idle gc.
process.atomBinding('idle_gc').start() process.atomBinding('idle_gc').start()

View file

@ -35,6 +35,7 @@ void AtomBindings::BindTo(v8::Handle<v8::Object> process) {
node::SetMethod(process, "atomBinding", Binding); node::SetMethod(process, "atomBinding", Binding);
node::SetMethod(process, "crash", Crash); node::SetMethod(process, "crash", Crash);
node::SetMethod(process, "activateUvLoop", ActivateUVLoop); node::SetMethod(process, "activateUvLoop", ActivateUVLoop);
node::SetMethod(process, "log", Log);
} }
// static // static
@ -96,4 +97,14 @@ v8::Handle<v8::Value> AtomBindings::ActivateUVLoop(const v8::Arguments& args) {
return v8::Undefined(); return v8::Undefined();
} }
// static
v8::Handle<v8::Value> AtomBindings::Log(const v8::Arguments& args) {
std::string message;
for (int i = 0; i < args.Length(); ++i)
message += *v8::String::Utf8Value(args[i]);
logging::LogMessage("CONSOLE", 0, 0).stream() << message;
return v8::Undefined();
}
} // namespace atom } // namespace atom

View file

@ -23,6 +23,7 @@ class AtomBindings {
static v8::Handle<v8::Value> Binding(const v8::Arguments& args); static v8::Handle<v8::Value> Binding(const v8::Arguments& args);
static v8::Handle<v8::Value> Crash(const v8::Arguments& args); static v8::Handle<v8::Value> Crash(const v8::Arguments& args);
static v8::Handle<v8::Value> ActivateUVLoop(const v8::Arguments& args); static v8::Handle<v8::Value> ActivateUVLoop(const v8::Arguments& args);
static v8::Handle<v8::Value> Log(const v8::Arguments& args);
DISALLOW_COPY_AND_ASSIGN(AtomBindings); DISALLOW_COPY_AND_ASSIGN(AtomBindings);
}; };