Jon Derring
Jon Derring

Reputation: 807

Any actual stable way to log errors in Node.js + Express?

So, I've been looking at this for quiet a while now. As of Node.js 0.8.15, Event: 'uncaughtException' at http://nodejs.org/api/process.html#process_event_uncaughtexception says:

Don't use it, use domains instead. If you do use it, restart your application after every unhandled exception!

And domains at http://nodejs.org/api/domain.html say:

Stability: 1 - Experimental

(also they refuse to work for me - my app still crashes)

All I am trying to do is not let my Node.js + Express app crash.

Any actual way anybody has been successful in logging ALL errors to a file (expected & unexpected like syntax errors) and not let Node.js crash?

I've heard plenty of theoretical answers, any actual code that works?

Upvotes: 5

Views: 2851

Answers (1)

Alex Robson
Alex Robson

Reputation: 156

I have run into similar circumstances and have been using uncaught exception. It may not be pretty, but with some additional tooling, I think you can end up with a nice outcome.

Use Forever and Winston

Let it crash

If you just want to keep your application up, maybe consider using forever from NodeJitsu. You can set a threshold for the number of times it should restart your app in the event you've got a nasty bug and it's just not going to stay up. Not allowing your app to cycle in the event of an uncaught exception could put the application in an invalid state and lead to more exceptions. Why not just let it crash and have forever restart it for you.

Logging before exit

To catch and log the errors, try using winston to catch and log the uncaught exception and then exit. See the section on Handling Uncaught Exceptions With Winston of their readme that explains how to handle this exact scenario. If winston is logging to a file, you can reference it and see how often your app is falling over and why.

Outcome

Combining the two, you should be able to setup an uncaught exception log file that you can refer to, keep your app up and running under most circumstances and avoid ignoring exceptions that could potentially put your application in an invalid state.

Alex

Upvotes: 9

Related Questions