What is @sentry/browser?
The @sentry/browser package is a JavaScript SDK for Sentry, which is an error tracking service that helps developers monitor and fix crashes in real time. The SDK hooks into the global error handling mechanisms of the browser and captures unhandled exceptions and other errors, providing rich context and insights into the underlying issues.
What are @sentry/browser's main functionalities?
Error Tracking
This feature automatically captures JavaScript exceptions and sends them to Sentry for analysis and tracking. The code initializes Sentry with a DSN (Data Source Name) and sets up a global error handler to capture exceptions.
Sentry.init({ dsn: 'YOUR_DSN' });
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
Sentry.captureException(errorObj);
return false;
}
Manual Error Reporting
This allows developers to manually report exceptions or errors to Sentry. The code block demonstrates how to catch an error in a try-catch block and manually send it to Sentry using the captureException method.
Sentry.init({ dsn: 'YOUR_DSN' });
try {
// Code that might fail
} catch (error) {
Sentry.captureException(error);
}
Performance Monitoring
This feature enables performance monitoring by capturing transactions and spans. The code initializes Sentry with a sample rate for transactions and demonstrates how to start and finish a transaction, which can be used to measure the performance of operations.
Sentry.init({ dsn: 'YOUR_DSN', tracesSampleRate: 1.0 });
const transaction = Sentry.startTransaction({ name: 'test transaction' });
// ... some code ...
transaction.finish();
Breadcrumbs
Breadcrumbs are a trail of events that happened prior to an issue. This feature allows you to record breadcrumbs manually. The code shows how to add a breadcrumb for an authentication event.
Sentry.init({ dsn: 'YOUR_DSN' });
Sentry.addBreadcrumb({
category: 'auth',
message: 'User authenticated',
level: Sentry.Severity.Info
});
User Feedback
This feature allows you to collect user feedback when an error occurs. The code initializes Sentry and then shows a dialog to the user to collect feedback for a specific event.
Sentry.init({ dsn: 'YOUR_DSN' });
Sentry.showReportDialog({ eventId: 'event_id' });
Other packages similar to @sentry/browser
bugsnag-js
Bugsnag provides similar error tracking and monitoring capabilities as Sentry. It offers real-time error reporting and can be used to monitor application stability. Bugsnag also provides features for error diagnostics and supports multiple platforms.
raygun4js
Raygun is another error monitoring service that offers crash reporting with detailed diagnostics. It supports real-time error tracking and performance monitoring, and it can be used to identify and diagnose software errors and performance issues.
rollbar-browser
Rollbar offers real-time error tracking and is similar to Sentry in its capabilities. It includes features like telemetry, person tracking, and version tracking. Rollbar provides a comprehensive dashboard for monitoring and analyzing errors.
Official Sentry SDK for Browsers
Links
Usage
To use this SDK, call Sentry.init(options)
as early as possible after loading the page. This will initialize the SDK
and hook into the environment. Note that you can turn off almost all side effects using the respective options.
import * as Sentry from '@sentry/browser';
Sentry.init({
dsn: '__DSN__',
});
To set context information or send manual events, use the exported functions of @sentry/browser
. Note that these
functions will not perform any action before you have called Sentry.init()
:
import * as Sentry from '@sentry/browser';
Sentry.setExtra('battery', 0.7);
Sentry.setTag('user_mode', 'admin');
Sentry.setUser({ id: '4711' });
Sentry.addBreadcrumb({
message: 'My Breadcrumb',
});
Sentry.captureMessage('Hello, world!');
Sentry.captureException(new Error('Good bye'));
Sentry.captureEvent({
message: 'Manual',
stacktrace: [
],
});
8.8.0
- feat: Upgrade OTEL dependencies (#12388)
This upgrades the OpenTelemetry dependencies to the latest versions and makes OTEL use import-in-the-middle
v1.8.0
.
This should fix numerous issues with using OTEL instrumentation with ESM.
High level issues fixed with OTEL + ESM:
- incompatibilities with using multiple loaders, commonly encountered while using
tsx
or similar libraries. - incompatibilities with libraries that use duplicate namespace exports like
date-fns
. - incompatibilities with libraries that use self-referencing namespace imports like
openai
. - incompatibilities with dynamic export patterns like exports with function calls.
ENOENT: no such file or directory
bugs that libraries like discord.js
surface.
If you are still encountering issues with OpenTelemetry instrumentation and ESM, please let us know.
- deps: Bump Sentry bundler plugins to version
2.18.0
(#12381) - feat: Add
thirdPartyErrorFilterIntegration
(#12267) - feat(core): Filter out error events with exception values and no stacktraces, values, or types (#12387)
- feat(core): Ignore additional common but inactionable errors (#12384)
- feat(deps): Bump @opentelemetry/propagator-aws-xray from 1.3.1 to 1.24.1 (#12333)
- feat(deps): Bump @sentry/cli from 2.31.2 to 2.32.1 (#12332)
- feat(redis): Support
mget
command in caching functionality (#12380) - feat(vercel-edge): Export core integrations from Vercel edge SDK (#12308)
- fix(browser): Fix idle span ending (#12306)
- fix(browser): Fix parenthesis parsing logic for chromium (#12373)
- fix(browser): Fix types export path for CJS (#12305)
- fix(feedback): Override TriggerLabel Option (#12316)
- fix(feedback): Wait for document to be ready before doing autoinject (#12294)
- fix(nextjs): Fix memory leak (#12335)
- fix(nextjs): Fix version detection and option insertion logic for
clientTraceMetadata
option (#12323) - fix(nextjs): Update argument name in log message about
sentry
property on Next.js config object (#12366) - fix(node): Do not manually finish / update root Hapi spans. (#12287)
- fix(node): Fix virtual parent span ID handling & update create-next-app E2E test (#12368)
- fix(node): Skip capturing Hapi Boom responses v8. (#12288)
- fix(performance): Fix LCP not getting picked up on initial pageload transaction by setting reportAllChanges to true
(#12360)
- fix(replay): Avoid infinite loop of logs (#12309)
- fix(replay): Ignore old events when manually starting replay (#12349)
- ref(browser): Ensure idle span ending is consistent (#12310)
- ref(profiling): unref timer (#12340)
Work in this release contributed by @dohooo, @mohd-akram, and @ykzts. Thank you for your contributions!