Show some ❤️ to Node.js process errors.
Node.js prints process errors
(uncaughtException
,
warning
,
unhandledRejection
,
rejectionHandled
)
on the console which is very useful. Unfortunately those errors:
- do not show stack traces for
warning
andrejectionHandled
making them hard to debug. - do not include
multipleResolves
errors (when a promise is resolved/rejected twice). - are inconvenient to log to an external service.
- are hard to test.
- cannot be conditionally skipped.
- are printed each time an error is repeated (except for
warning
). - are not human-friendly.
log-process-errors
fixes all those issues.
Without log-process-errors
:
With log-process-errors
:
- Proper logging of process errors in production.
- Debugging of process errors in development.
- Automated testing of process errors.
You can try this library:
- either directly in your browser.
- or by executing the
examples
files in a terminal.
Production code (e.g. a server) can install this either as a production or development dependency:
npm install log-process-errors
However, libraries should install this as a development dependency:
npm install -D log-process-errors
This is because logging is modified globally and libraries users might not expect this side-effect. Also, this might lead to conflicts between libraries.
There are two ways to load this library. The first is to use the
node -r
CLI flag:
node -r log-process-errors/build/register ...
The second is:
const logProcessErrors = require('log-process-errors')
logProcessErrors(options)
logProcessErrors()
should be called as early as possible in the code, before
other require
/import
statements.
options
is an optional object with the following properties.
Type: function(error, level, originalError)
Customizes how process errors are logged.
Full documentation.
Type: object
Default: { warning: 'warn', multipleResolves: 'info', default: 'error' }
Which log level to use.
Full documentation.
Type: string[]
Default: ['uncaughtException', 'unhandledRejection']
for Node >= 15.0.0
, ['uncaughtException']
otherwise.
Which process errors should trigger process.exit(1)
.
Full documentation.
Type: string
Value: 'ava'
, 'mocha'
, 'jasmine'
, 'tape'
or 'node-tap'
Default: undefined
When running tests, makes them fail if there are any process errors.
Full documentation.
Type: boolean
Default: true
if the output is a terminal.
Colorizes messages.
Full documentation.
If you found a bug or would like a new feature, don't hesitate to submit an issue on GitHub.
For other questions, feel free to chat with us on Gitter.
Everyone is welcome regardless of personal background. We enforce a Code of conduct in order to promote a positive and inclusive environment.
This project was made with ❤️. The simplest way to give back is by starring and sharing it online.
If the documentation is unclear or has a typo, please click on the page's Edit
button (pencil icon) and suggest a correction.
If you would like to help us fix a bug or add a new feature, please check our guidelines. Pull requests are welcome!
Thanks go to our wonderful contributors:
ehmicky 💻 🎨 🤔 📖 |
Steven Vachon 💬 |
Hongarc 📖 💻 |
Andy Brenneke 🐛 |