- 版本:1.0.0
- GitHub: https://github.com/timdoege/nativescript-trace-sentry
- NPM: https://npmjs.net.cn/package/nativescript-trace-sentry
- 下载
- 昨天:0
- 上周:1
- 上个月:3
NativeScript Sentry TraceWriter

此插件提供了一个自定义的 NativeScript TraceWriter,它将使用官方 Sentry SDK for Browsers 将消息记录到 Sentry.io。这对于从用户 iOS 和 Android 设备捕获生产环境中的跟踪消息非常有用。此插件基于 Todd Anglin 的 NativeScript Raven TraceWriter (https://github.com/toddanglin/nativescript-trace-raven) 插件,该插件使用已弃用(但受支持)的 Raven.JS 库。
入门指南
要将插件添加到 NativeScript 项目中
tns plugin add nativescript-trace-sentry
注意:要使用此插件,需要一个来自 Sentry.io 的 "DSN" 键。此键用于初始化插件并将日志发送到特定的 Sentry.io 项目。
用法
一旦安装了插件,只需初始化新的 TraceWriter。这可以通过不同的方式完成,但为了便于全局使用,在应用程序启动时设置新的 TraceWriter
app.ts
import * as app from 'application';
import * as trace from 'trace';
import { TraceSentry } from 'nativescript-trace-Sentry';
app.on(app.launchEvent, (args: app.ApplicationEventData) => {
let sentryDsn = "[YOUR SENTRY DSN KEY]";
trace.setCategories(trace.categories.concat(trace.categories.Error, trace.categories.Debug));
trace.addWriter(new TraceSentry(sentryDsn));
trace.enable();
});
然后,在您的应用程序中,只需像平常一样使用 trace。输出现在将发送到 Sentry.io。
示例
trace.write("Something happened in the app", trace.categories.Error, trace.messageType.error);
注意:Sentry.io 根据日志量收费,因此作为最佳实践,在常规开发期间不要启用此自定义 TraceWriter
除了跟踪消息外,此插件还会将以下详细信息与每个日志一起发送到 Sentry
- NativeScript 运行时版本
- 设备平台(iOS/Android)
- 设备操作系统版本
- 设备类型(手机/平板电脑等)
- 设备型号(iPhone,Galaxy S3 等)
- 设备语言(en-US 等)
- 设备 UUID
- 设备方向(纵向/横向)
- 电池电量(0 - 100,如果可用)
- 应用程序版本名称
- 环境名称(默认 "Debug")
- 用户 IP 地址
日志级别
Sentry.io 为日志分类提供了三个级别:info
、warning
和 error
。
在使用 TraceWriter 和 trace
API 记录时,trace.messageType
将映射到 Sentry 日志级别
trace.messageType.log
=== 日志类型:info
trace.messageType.info
=== 日志类型:info
trace.messageType.warn
=== 日志类型:warning
trace.messageType.error
=== 日志类型:error
如果省略了 trace.messageType
,则默认日志级别为 error
。
扩展使用
在初始化 Sentry 时,您可以提供一个 environment
字符串,以描述在发送日志消息时应用程序正在运行的位置。默认情况下,此字符串设置为 debug
。如果您想指定自己的环境字符串,只需在初始化时添加 DSN 键即可
trace.addWriter(new TraceSentry(sentryDsn, "production"));
记录异常
与使用 trace
记录 Error 不同,Sentry.captureException
API 还会尝试将堆栈跟踪信息包含在日志中。
import Sentry = require("Sentry-js");
try {
throw new Error("This is an example error with stack trace");
} catch (err) {
Sentry.captureException(err);
}
添加面包屑
您可以手动创建将被包含在 Sentry 日志中的 "面包屑"。面包屑旨在显示导致异常、应用程序崩溃或日志消息的操作路径。例如,要添加一个在按钮点击时创建的面包屑
public buttonTap(args: EventData) {
let btn = <Button>args.object;
Sentry.addBreadcrumb({
message: `Button tapped`,
category: "action",
data: {
id: btn.id,
text: btn.text
},
level: Sentry.Severity.Info
});
}
最后事件 ID
《EventId》是由Sentry为所有日志生成的一个全局唯一字符串。Sentry提供了获取最新日志的《EventId》的功能,以便您向用户展示并用于客户服务报告。要使用Sentry获取最新的《EventId》
let eventId = Sentry.lastEventId();
注意事项
Sentry.io为日志事件提供慷慨的免费套餐,但最终会根据日志量收费。因此,请谨慎只记录对生产环境故障排除有帮助的事件。
这意味着:不要在记录到Sentry时使用trace.categories.All
这种冗长的日志记录可能会产生比所需多得多的日志,并迅速增加您的Sentry.io账单。
最佳实践
- 仅在生产环境中向Sentry记录日志
- 最小化记录的
trace
类别(最小:trace.categories.Error
)
原生错误
由于此插件在NativeScript JavaScript层运行,它可能无法捕获所有原生iOS或Android错误。这通常是正常的,因为与应用程序代码相关的错误将被捕获,但如果需要原生iOS/Android日志记录,请使用Firebase等不同插件。
自动面包屑
除了提供自定义TraceWriter外,此插件还将自动为这些全局Page
事件建立自动面包屑
onNavigatedTo
onLoaded
onShownModally
每当这些事件之一发生时,都会在历史记录中添加一个新的面包屑。要禁用此行为,使用额外的参数初始化TraceSentry
new TraceSentry("[YOUR DSN KEY]", "production", false)
最后一个参数将启用/禁用由此插件创建的自动面包屑。默认为true
(启用)。
使用演示
要尝试此插件的演示,请按照以下步骤操作
- 从Sentry.io获取DSN密钥
- 克隆此存储库
- 导航到
demo
文件夹,并在您的代码编辑器中打开app.ts
- 将
sentryDsn
字符串替换为您的DSN密钥 - 导航回克隆存储库的根目录
- 运行
npm run demo.ios
或npm run demo.android
如果在运行演示之前未添加DSN密钥,则应用程序将在启动时崩溃。
贡献
想帮助使此插件更好?在GitHub上报告问题
https://github.com/timdoege/nativescript-trace-sentry/issues
欢迎pull requests。