@nativescript-community/sentry
一个跨平台的应用程序监控工具,专注于错误报告。
npm i --save @nativescript-community/sentry

npm npm GitHub forks GitHub stars

安装

  • tns plugin add @nativescript-community/sentry

在添加插件后,请确保运行新的构建以避免任何问题。

配置

Webpack

您需要将类似以下内容添加到您的 webpack 配置中,以便上传源映射。由于我使用的是 .sentryclirc 配置文件,所以我在选项中未设置 authproject

  • SOURCEMAP_REL_DIR:我几乎总是将其设置为 ../../sourcemaps
  • SENTRY_PREFIX:默认为 app:///
if (!!sentry && !!uploadSentry) {
config.devtool = false;
config.plugins.push(
new webpack.SourceMapDevToolPlugin({
append: `\n//# sourceMappingURL=${process.env.SENTRY_PREFIX}[name].js.map`,
filename: join(process.env.SOURCEMAP_REL_DIR, '[name].js.map')
})
);
let appVersion;
let buildNumber;
if (isAndroid) {
const gradlePath = `${appResourcesPath}/Android/app.gradle`;
const gradleData = readFileSync(gradlePath, 'utf8');
appVersion = gradleData.match(/versionName "((?:[0-9]+\.?)+)"/)[1];
buildNumber = gradleData.match(/versionCode ([0-9]+)/)[1];
} else if (isIOS) {
const plistPath = `${appResourcesPath}/iOS/Info.plist`;
const plistData = readFileSync(plistPath, 'utf8');
appVersion = plistData.match(/<key>CFBundleShortVersionString<\/key>[\s\n]*<string>(.*?)<\/string>/)[1];
buildNumber = plistData.match(/<key>CFBundleVersion<\/key>[\s\n]*<string>([0-9]*)<\/string>/)[1];
}
config.plugins.push(
new SentryCliPlugin({
release: appVersion,
urlPrefix: 'app:///',
rewrite: true,
release: `${nconfig.id}@${appVersion}+${buildNumber}`,
dist: `${buildNumber}.${platform}`,
ignoreFile: '.sentrycliignore',
include: [join(dist, process.env.SOURCEMAP_REL_DIR)]
})
);
}

### 调试

要使调试模式正常工作,您需要在 webpack 中添加以下内容(请参阅示例应用)

nsWebpack.chainWebpack(config=>{
config.entry('bundle').prepend('@nativescript-community/sentry/process');
});

Fastlane

如果您使用 fastlane,则可以使用它来创建发布和上传 dsyms。为此,您需要安装它

fastlane add_plugin sentry

目前,您还应安装 nativescript-set-version,因为它需要读取应用程序版本和构建号。

npm install -D nativescript-set-version

现在您可以设置您的 Fastfile

  • 创建发布
version = ""
versionCode = ""

Dir.chdir("..") do
version = sh("./node_modules/.bin/get-version", platform, "version").gsub(/\n/,'')
versionCode = sh("./node_modules/.bin/get-version", platform, "code").gsub(/\n/,'')
end
sentry_create_release(
version: version, # release version to create
)
  • 上传 dsyms
sentry_upload_dsym

在应用程序中使用

import * as Sentry from '@nativescript-community/sentry';

const buildNumber = await getBuildNumber();
const versionName = await getVersionName();
const buildNumber = await getBuildNumber();
const appId = await getAppId();
Sentry.init({
dsn: SENTRY_DSN,
debug: true,
enableAutoPerformanceTracking: true,
});

报告 NativeScript 错误

onerror 方法确保所有未处理的 NativeScript 错误都会在生产环境中被 Sentry 捕获,使用的是 自定义错误处理器

报告已处理错误

如果您希望将已处理的错误发送到 Bugsnag,可以将任何 Error 对象传递给 Sentry notify 方法

import * as Sentry from '@nativescript-community/sentry';
try {
// potentially crashy code
} catch (error) {
Sentry.captureException(error);
}

报告 promise 拒绝

要报告 promise 拒绝,请在 catch 块中使用 notify()

import * as Sentry from '@nativescript-community/sentry';
new Promise(function(resolve, reject) {
/* potentially failing code */
})
.then(function () { /* if the promise is resolved */ })
.catch(function (error) {
Sentry.captureException(error);
});

发送诊断数据

自动捕获的诊断

Bugsnag 将自动捕获并附加以下诊断数据

  • 完整的堆栈跟踪
  • 电池状态
  • 设备型号和操作系统版本
  • 所有线程的线程状态
  • 发布阶段(生产、调试等)
  • 应用在前台和/或后台运行的时间
  • 设备特定的标识符和供应商特定的标识符

识别用户

为了将错误与客户报告相关联,或查看经历过每个错误的用户列表,捕获和显示用户信息非常有帮助。在 Bugsnag 客户端设置的任何信息都会随每个错误报告一起发送

Sentry.setUser({"email": "[email protected]"});

记录面包屑

为了了解每次崩溃之前应用程序中发生了什么,留下简短的日志语句(我们称之为面包屑)可能会有所帮助。最后几个面包屑附加到崩溃中,以帮助诊断导致错误的事件。

自动捕获的面包屑

默认情况下,Bugsnag 捕获常见事件,包括

  • 低内存警告
  • 设备旋转(如果适用)
  • 菜单呈现
  • 截图捕获(不是截图本身)
  • 撤销和重做
  • 表格视图选择
  • 窗口可见性更改
  • 非致命错误
  • 日志消息(默认关闭,请参阅配置选项)

附加自定义面包屑

要附加额外的面包屑,请使用 leaveBreadcrumb 函数

Sentry.addBreadcrumb({
category: 'ui',
message: 'load main view',
level: 'info'
});