Closed
Description
openedon Oct 12, 2021
Currently the agent will capture an APM error for an uncaughtException
(process event) -- depending on the captureExceptions
config option (default true). We should do the same for unhandledRejection
. I'm not sure if we'd want that to be a separate config option or piggy-back on captureExceptions
.
// example-unhandled-rejection.js
var apm = require('./').start({
metricsInterval: '0s',
serviceName: 'example-unhandled-rejection'
})
Promise.reject('boom')
Using node v12, without the APM agent:
% ELASTIC_APM_ACTIVE=false node example-unhandled-rejection.js
(node:68494) UnhandledPromiseRejectionWarning: boom
(node:68494) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:68494) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
and with the APM agent:
% node example-unhandled-rejection.js
(node:68500) UnhandledPromiseRejectionWarning: boom
(node:68500) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:68500) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
No "error" event is reported to APM server in the second case. It should be, without changing the behaviour of the node app (which I hope is possible).
Node has the following option:
--unhandled-rejections=... define unhandled rejections behavior. Options
are 'strict' (raise an error), 'warn'
(enforce warnings) or 'none' (silence
warnings)
and the default value for that has changed over the major node.js versions. I think this probably means we should make this separately configurable. The default should be to capture an exception.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment