Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 553
Jon Derring Avatar asked Dec 11 '12 06:12

Jon Derring


People also ask

How do I log errors in node js?

The built-in console module in Node. js lets you write log messages to standard output (stdout) and standard error (stderr)using the log and error functions, respectively. This module is most definitely the simplest method for getting started, since it doesn't require importing or configuring any third-party packages.


1 Answers

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

like image 143
Alex Robson Avatar answered Nov 15 '22 07:11

Alex Robson