The init
method sets the options when you first initialise the library.
Understand.init({
env: 'production',
token: 'b6eeab13-72f6-4c35-8452-5e96d3d24f1a',
disableSourceMaps: false,
beforeSend: (event) => {},
context: {}
});
Required, a string that defines your application environment.
Required, the input token from your Understand.io channel.
Disables source maps. Check the source maps section for more information.
fn: (event: Object) => event
A callback function that allows you to add custom logic to an event before sending it.
Understand.init({
...
beforeSend: (event) => {
// add custom tag based on event message
if (event.message && event.message.match(/login failed/i)) {
event.tags = [...event.tags, 'authentication'];
}
return event;
}
});
You can also optionally discard the event by returning null
.
Understand.init({
...
beforeSend: (event) => {
// discard events coming from localhost
if (event.client_ip === '127.0.0.1') {
return null;
}
return event;
}
});
The context
object lets you add context information along with your events.
Context can be injected using the initialization options:
Understand.init({
...
context: {
request_id: '<request id>',
session_id: '<session id>',
user_id: '<user id>',
client_ip: '<client ip>',
tags: []
}
});
or using setters, as explained in the Context section.
request_id
: this value is used by Understand to group multiple errors into the same issue. This id is unique per page visit.
session_id
: this value is used by Understand to group errors into the same session. You can optionally set this value to your HTTP server session identifier.
user_id
: integer or null
, the identifier of the logged user.
client_ip
: the IP address of the user.
tags
: array of tags that can help you categorize events.
Note: the handler will take care of providing default values for request_id
and session_id
, but you could always use your own values if you want to have more control on how events are grouped. For example, if you're using Laravel you can easily set the context using framework specific methods:
Understand.init({
session_id: '@{{ sha1(request()->session()->getId()) }}',
user_id: @{{ auth()->id() }},
client_ip: '@{{ request()->getClientIp() }}'
});
Note that here we are using sha1
to hash the session id in order to avoid security concernes.
To automatically attach global handlers to capture uncaught exceptions and unhandled rejections you will need to call catchErrors
after initialization process.
Understand.catchErrors();
To optionally enable/disable global handlers you can pass an object to catchErrors
with the proper boolean values, for example:
Understand.catchErrors({
enableWindowError: true,
enableUnhandledRejection: false
});
enableWindowError
(true
by default) automatically setups window.onerror
handler to catch JavaScript runtime errors.enableUnhandledRejection
(true
by default) automatically setups window.onunhandledrejection
handler, for catching events raised by unhandled Promise rejections. Note: the browser support for this feature is limited.You can pass an Error object to logError()
to get it captured as an event.
try {
throw new Error('Oh snap!');
} catch (e) {
Understand.logError(e);
}
You can throw a string (or other primitives) as an error, but it would then be treated as a message. See A string is not an Error for more information.
If you need to send a basic message to Understand you can do so by using the logMessage()
method:
Understand.logMessage('my message', 'info');
You can set the severity of a message to one of five values: fatal
, error
, warning
, info
, and debug
. When capturing messages info
is the default level.
Note: only messages with fatal
and error
severity level will show up in the Errors section of Understand's dashboard.
As already introduced in the Initialization Options section, Understand supports 3 types of structured data for context, which allows you to add more useful information in order to identify issues. Those values can be set at any time using setters:
Understand.withContext(function (context) {
context.setRequestId('<request identifier>');
context.setSessionId('<session identifier>');
});
Understand.withContext(function (context) {
context.setUserId(<user identifier>);
context.setClientIp('<ip address>');
});
Understand.withContext(function (context) {
context.setTags(['backlog']);
// or push individual tag
context.setTag('demo');
});
You can clear the context using the clear()
method:
Understand.withContext(function (context) {
context.clear();
});
If at any time you decide that you don't want to report errors anymore you can close the handler.
Understand.close();