Node.js: console.log message doesn't show up if method throws exception... why?


In Node.js, if I have a method that throws an exception, console.log statements from that method don't fire. I recognize that in the simple test case below that I should catch the exception from the readFileSync call, or otherwise be defensive about it. Just curious if someone could explain the behavior to me.

Simple test case:

var fs = require('fs');

function readAFileThatDoesntExist(filename) {

console.log("We're about to read a file that doesn't exist!");


$ node test.js
We're about to read a file that doesn't exist!

  return, stringToFlags(flags), mode);
Error: ENOENT, no such file or directory 'C:\blog\projects\bloggen\scripts\afile'
    at Object.fs.openSync (fs.js:338:18)
    at Object.fs.readFileSync (fs.js:182:15)
    at readAFileThatDoesntExist (C:\blog\projects\bloggen\scripts\test.js:5:8)
    at Object.<anonymous> (C:\blog\projects\bloggen\scripts\test.js:9:1)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)
Problem courtesy of: Shaun


Ah, figured it out.

It seems that console.log isn't finishing before the process exits... If I use console.warn, the message does show up.

This post explains it: is node.js' console.log asynchronous?

Also, I'm on an older version (0.8.15), so this may no longer be relevant.

Solution courtesy of: Shaun


There is currently no discussion for this recipe.

This recipe can be found in it's original form on Stack Over Flow.