集成Sentry

1.简介

Sentry 是一个实时事件日志记录和汇集的平台。它分为客户端和服务端,客户端(目前客户端有Python, React,Android,IOS等多种平台)就嵌入在你的应用程序中间,程序出现异常就向服务端发送消息,服务端将消息记录到数据库中并提供一个web页方便查看。Sentry由python编写,源码开放,性能卓越,易于扩展。
优点:支持众多前端,且后端开源

2.ReactNative中引入sentry

引入相关的依赖

$ npm install react-native-sentry --save
# or
# yarn add react-native-sentry
# if you are using yarn
# this is for linking
$ react-native link react-native-sentry

index.js文件中添加以下代码:

import { Sentry } from 'react-native-sentry';
Sentry.config('https://fc6d6b877f164030a58120c5ca2f2abb@sentry.io/1482326').install();

以上的相关配置,可进入 https://sentry.io/organizations/yourorg/projects/(其中yourorg,是注册时添加的组织名称 ),点击相关的项目中,即可找到相关的配置信息

引入后,即可在官网中查看项目的异常信息,示例如下:
异常代码如下,点击按钮后会直接报错

    _renderItem = ({item, index}) => {
        let name = item.name.replace('Screen', '');
        let color ='#'+(Math.random()*0xffffff<<0).toString(16);
        return <TouchableOpacity
                activeOpacity={0.6}
                style={[styles.itemContainer, {backgroundColor: color}]}
                onPress={() => {
                    let eror = items.err;    //此处写了一个空引用,用于测试报错
                    this.props.navigation.navigate(item.navigateTo, {
                        otherParam: name,
                    });
                }}
            >
                <Text style={styles.itemName}>{name}</Text>
            </TouchableOpacity>
    };

官网捕获的异常信息如下:

异常信息截图.PNG

异常详细信息如下:

ReferenceError: Can't find variable: items
  at onPress(app:///index.android.bundle:764:693)
  at touchableHandlePress(app:///index.android.bundle:213:1243)
  at _performSideEffectsForTransition(app:///index.android.bundle:197:8865)
  at _receiveSignal(app:///index.android.bundle:197:7629)
  at touchableHandleResponderRelease(app:///index.android.bundle:197:4945)
  at y(app:///index.android.bundle:88:576)
  at k(app:///index.android.bundle:88:719)
  at E(app:///index.android.bundle:88:773)
  at D(app:///index.android.bundle:88:1940)
  at F(app:///index.android.bundle:88:2699)
  at [native code] forEach(:0:0)
  at W(app:///index.android.bundle:88:2499)
  at ? (app:///index.android.bundle:88:14001)
  at Ae(app:///index.android.bundle:88:75072)
  at ze(app:///index.android.bundle:88:13671)
  at Oe(app:///index.android.bundle:88:13844)
  at receiveTouches(app:///index.android.bundle:88:14603)
  at value(app:///index.android.bundle:25:3449)
  at ? (app:///index.android.bundle:25:960)
  at value(app:///index.android.bundle:25:2703)
  at value(app:///index.android.bundle:25:932)

通过以上相关信息,只知道一个onPress 事件,引发了一个ReferenceError异常,但是无法知道具体的代码位置;这是因为源码是经过压缩的,需要上传sourcemap进行关联

3.上传sourcemap
  • 生成sourcemap 文件
react-native bundle \
  --dev false \
  --platform android \
  --entry-file index.js \
  --bundle-output android.main.bundle \
  --sourcemap-output android.main.bundle.map
  • 安装sentry
    npm -g install @sentry/cli
  • 配置sentry
    执行sentry-cli login命令,根据操作,填写相关的 token
    配置sentry.PNG

    执行操作成功后,会在c:\Users\xxx目录中生成一个.sentryclirc文件
  • 修改.sentryclirc文件
    打开.sentryclirc文件,此时内容如下:
[auth]
token=b24d7dff5eb7421682bd5c729dxxxx12a2b8734d23a7ce0e85d9

完善相关的组织服务器地址等信息,如下所示:

[auth]
token=b24d7dff5eb7421682bd5c729xxxa2b8734d23a7ce0e85d94345ae
[defaults]
url=https://sentry.io/
org=xzg8023
project=rnstudy
  • 上传sourcemap
sentry-cli releases \
    files RELEASE_NAME \
    upload-sourcemaps \
    --dist DISTRIBUTION_NAME \
    --strip-prefix /path/to/project/root \
    --rewrite \
    path/to/index.android.bundle path/to/index.android.map

RELEASE_NAME: 包名-版本号,如 com.rnstudy-1.0.0
DISTRIBUTION_NAME: 构建号,如 1,在Android或iOS项目中设置

配置信息.PNG
sentry-cli releases files com.rnstudy-1.0.0 upload-sourcemaps --dist 1 --strip-prefix /study --rewrite index.android.bundle index.android.bundle.map

上传成功后,再次点击引发ReferenceError异常,此时在官网,再次查看异常信息如下所示:

异常信息.PNG

此时,相关异常代码一目了然了。

如果相关操作后,发现还是没有显示源码位置,可能是以下问题:

  • 网络延迟问题 :因为相关的异常信息上传和服务器响应都需要一定的时间,可稍后刷新一下试试
  • 构建版本信息不配置问题: 此时需要检查相关的版本是否匹配。

更多配置:
Sentry Additional Configuration

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容