⚠️ This package is deprecated. Use the native sentry hapi integration.
A hapi plugin for request error logging to Sentry.
Use the hapi plugin like this:
const server = hapi.server();
await server.register({
plugin: require('hapi-sentry'),
options: {
client: { dsn: 'dsn-here' },
},
});
This setup will:
request.auth.credentials
to enhance errors from routesYou can use the following options to customize this behavior further.
The plugin options, you can pass in while registering are the following:
property | type | description |
---|---|---|
baseUri |
string | uri to be used as base for captured urls |
scope.tags |
object | An array of tags to be sent with every event |
scope.tags.name |
string | The name of a tag |
scope.tags.value |
any | The value of a tag |
scope.extra |
object | An object of arbitrary format to be sent as extra data on every event |
client |
object | required A @sentry/node instance which was already initialized (using Sentry.init ) OR an options object to be passed to an internally initialized @sentry/node (client.dsn is only required in the latter case) |
client.dsn |
string/false | required The Dsn used to connect to Sentry and identify the project. If false, the SDK will not send any data to Sentry. |
client.debug |
boolean | Turn debug mode on/off |
client.release |
string | Tag events with the version/release identifier of your application |
client.environment |
string | The current environment of your application (e.g. 'production' ) |
client.sampleRate |
number | A global sample rate to apply to all events (0 - 1) |
client.maxBreadcrumbs |
number | The maximum number of breadcrumbs sent with events. Default: 100 |
client.attachStacktrace |
any | Attaches stacktraces to pure capture message / log integrations |
client.sendDefaultPii |
boolean | If this flag is enabled, certain personally identifiable information is added by active integrations |
client.serverName |
string | Overwrite the server name (device name) |
client.beforeSend |
func | A callback invoked during event submission, allowing to optionally modify the event before it is sent to Sentry |
client.beforeBreadcrumb |
func | A callback invoked when adding a breadcrumb, allowing to optionally modify it before adding it to future events. |
trackUser |
boolean | Whether or not to track the user via the per-request scope. Default: true |
catchLogErrors |
boolean/array | Handles capturing server.log and request.log events. Default: false |
useDomainPerRequest |
boolean | Whether or not to use Domains for seperating request processing. Only activate this feature, if you really need to seperate breadcrumbs, etc. of requests. It utilizes a deprecated Node.js feature which reduces performance. Default: false |
The baseUri
option is used internally to get a correct URL in sentry issues.
The scope
option is used to set up a global
Scope
for all events and the
client
option
is used as a Sentry instance or to initialize an internally used Sentry instance.
The internally used client (initialized in either way) is accessible through
server.plugins['hapi-sentry'].client
.
You can pass a Sentry
instance to the client
option if you already initialized your own like this:
const server = hapi.server();
const Sentry = require('sentry');
Sentry.init({ dsn: 'dsn-here' });
await server.register({ plugin: require('hapi-sentry'), options: { client: Sentry } });
You can alter the scope of an event in every
hapi route handler
by accessing request.sentryScope
.
Just use some of the Scope
s
methods to add breadcrumbs, set extra, fingerprint or level information, etc. like this:
server.route({
method: 'GET',
path: '/your/route',
handler(request) {
try {
// ... some logic here
} catch (error) {
request.sentryScope.setExtra('someErrorSpecificInfo', 'yourInformation');
throw error;
}
},
});
You can enable capturing of request.log
and server.log
events using the catchLogErrors
option.
All events which are Error
objects and are tagged by one of ['error', 'fatal', 'fail']
are
automatically being tracked when catchLogErrors
is set to true
, e.g.:
request.log(['error', 'foo'], new Error('Oh no!'));
server.log(['error', 'foo'], new Error('No no!'));
The considered tags can be changed by setting catchLogErrors
to a custom array of tags like
['error', 'warn', 'failure']
.
hapi-sentry
currently does not capture the body for performance reasons. You can use the following snippet to capture the body in all sentry errors:
server.ext({
type: 'onPostAuth',
method(request, h) {
request.payload && request.sentryScope.setExtra('payload', request.payload);
return h.continue;
},
});