NativeScript plugin that uses sentry-android and sentry-cocoa to catch native errors/stack traces and send them to a sentry server.
7️⃣ – This is the documentation of v2 which is compatible with NativeScript 7
🚧 – Currently in alpha state, use with caution!
6️⃣ – If you are using NativeScript 6, use a v1 release.
ns plugin add nativescript-sentry
Add the following line to your AndroidManifest.xml
within the <application>-tag
:
<meta-data android:name="io.sentry.dsn" android:value="__YOUR_DSN_HERE__" />
import { Sentry } from 'nativescript-sentry';
const dsn = 'https://<key>:<secret>@host/<project>';
Sentry.init(dsn);
import { SentryModule } from 'nativescript-sentry/angular';
NgModule({
// ...
imports: [
SentryModule.forRoot({
dsn: 'https://<key>:<secret>@host/<project>',
discardUncaughtJsExceptions: true
})
]
// ...
});
Note: this plugin adds a custom ErrorHandler to your angular app
Sentry.captureException(exeption: Error, options?: ExceptionOptions);
export interface ExceptionOptions {
// Object of additional Key/value pairs which generate breakdowns charts and search filters in Sentry.
tags?: object;
// Object of unstructured data which is stored with events.
extra?: object;
}
Example:
try {
throw new Error('Whoops!');
} catch (error) {
Sentry.captureException(error, {});
}
Sentry.captureMessage(message: string, options?: MessageOptions)
export interface MessageOptions {
level?: Level;
// Object of additional Key/value pairs which generate breakdowns charts and search filters.
tags?: object;
// Object of unstructured data which is stored with events.
extra?: object;
}
export enum Level {
Fatal = 'fatal',
Error = 'error',
Warning = 'warning',
Info = 'info',
Debug = 'debug'
}
Sentry.captureBreadcrumb(breadcrumb: BreadCrumb)
export interface BreadCrumb {
message: string;
category: string;
level: Level;
}
Sentry.setContextUser(user: SentryUser)
export interface SentryUser {
id: string;
email?: string;
username?: string;
}
Sentry.setContextTags(tags: object)
Sentry.setContextExtra(extra: object)
Sentry.clearContext();
If you have a native exception and the app exits, the plugin will save the log and send it in the next app startup, this is how the native plugins are implemented and it is expected behavior.
Sentry has an optional dependency on SLF4J on Android, which when not present will log an error about it not being in the application.
System.err: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
System.err: SLF4J: Defaulting to no-operation (NOP) logger implementation
System.err: SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
To get rid of this log warning you can add a dependency to your app's app.gradle file located in App_Resources/Android/app.gradle
to include:
compile 'org.slf4j:slf4j-nop:1.7.25'
in the dependencies. See the demo app.
To run and test the demo apps you need to replace the placeholder __YOUR_DSN_HERE__
by your own DSN in the following files:
- demo/App_Resources/Android/src/main/AndroidManifest.xml
- demo/app/app.ts
- demo-ng/App_Resources/Android/src/main/AndroidManifest.xml
- demo-ng/src/app.module.ts
- fix issues with Angular
- fix issues with user data on android
Thanks to @jeremypele and @jerbob92!
- update Android SDK
- update for NativeScript 7
- add workflows for demo apps
Thanks to @bradmartin!
- Release new version under original name on npmjs.org
- Fix GitHub Workflow to use existing publishing scripts
- Set up GitHub Workflow for npm publising
- Bumps to latest native SDK releases
- Stringifies data before writing it to Extras (Android)
Package was forked from the unmaintained package danielgek/nativescript-sentry. Access to original npm package has been transfered. Many thanks to @danielgek for his original work on this plugin!
- bumps to latest native SDK releases
- implements improved data converter(#22)
- adds data to SentryUser
Thanks to @bradmartin and @jerbob92!
- back to native approach thanks to @bradmartin
- update dependencies
- update test app
- working native breadcrums for ios
- fix dsn init thanks to @kvnvelasco
BREAKING CHANGES
capture()
method was deprecated in favor ofcaptureMessage
/captureException
Features
- Moving to an hybrid approach with both clients (web/native)
- breadcrumbs
- tags
- user info
- set tags and extra for each event
- fix Aot compilation for angular apps
- fix typos thanks to @muratcorlu
- update demos dependencies
- update ios and android native dependencies
- fix ios event capture
- fix stringify
- fix angular error handler
- @danielgek: for being the original author of this plugin danielgek/nativescript-sentry
- @hypery2k: for his nativescript-fabric (helped the original author a lot!)