cocos creator接入sentry

cocos creator接入sentry

有很长时间没有写过东西了,最近闲来无事,随便写点东西
上次写东西仿佛还是大学的时候。。。

毕业之后一直在做幼儿教育类的app,从认字做到数学再到音乐,经历了不少的项目,确实学到了很多东西。

现在市面上的教育类app还是挺多的(小朋友的钱好赚呀。。。)
大部分项目用的都是cocos creator+typescript

啊 不废话了 今天来说说 sentry

sentry是一个前端错误监控系统,实际项目中还是很好用的,实时监控到项目中发生的报错,如果遇到严重的错误,立马热更修复掉,能将影响用户数尽量降到最低。

1.首先是安装

通过docker安装sentry还是很方便的,docker的安装这边就不多做赘述了,直接开搞。。。

需要注意的是,sentry需要服务器至少有2400M的RAM

//克隆sentry
git clone https://github.com/getsentry/onpremise.git
// 进去
cd onpremise
// 安装
./install.sh

然后静静的等待漫长的安装过程。。。

在这里插入图片描述
好的完成了
然后就是按照提示创建用户了,
在这里插入图片描述
创建完成后运行

docker-compose up -d

安装就完成了

我这边安装在了本地,sentry的默认端口是9000
进去127.0.0.1:9000,应该就能进去sentry的界面了
在这里插入图片描述
输入刚刚的账户密码
在这里插入图片描述
啊 ~进来了。。。。。。

2.接下来是接进cocos

创建一个node.js项目
在这里插入图片描述
接下来按照提示在你的cocos项目中添加sentry的依赖

# Using yarn
yarn add @sentry/node @sentry/tracing

# Using npm
npm install --save @sentry/node @sentry/tracing

3.接下来是报告错误的脚本

当遇到报错的时候sentry会自动将错误上报,同时我们也可以在某些地方自己手动去报错,sentry提供了很多信息的展示,这边我们加上了用户id的展示,可以根据需求自行添加别的信息,也可以将报错做一些处理后再上报,这边仅做一个展示,就不写多余的代码了。:)

class ErrorReport {
    init() {
        Sentry.init({
            dsn: 'http://',
            environment: 'dev',
            tracesSampleRate: 1.0,
        });
        this.trackUser();
        if (cc.sys.isNative && window) {
            console.log('start report');
            // 监听全局报错
            window.__errorHandler = (file: string, line: number, msg: string, stack: string) => {
                try {
                    Sentry.captureException(stack);
                } catch (e) {
                    console.error(`Failed to report error in ErrorAnalytics ${e}`, e.stack);
                }
            };
        }
    }

    /**
     * 跟踪用户信息
     */
    public trackUser() {
        try {
            const id = PlatTs.getUserID();
            const sentryUser: Sentry.User = {
                id: id,
            };
            Sentry.configureScope((scope) => {
                scope.setUser(sentryUser);
            });
        } catch (e) {
            console.error(`Failed to track user in ErrorAnalytics ${e}`, e.stack);
        }
    }

    /**
     * 手动报错
     * @param e
     */
    reportError(e: any) {
        Sentry.captureException(e);
    }
}

export const errorReport = new ErrorReport();

到这里理论上sentry应该已经能接到报错信息了,但是如果项目中用的是typescript可能还是收不到报错信息,一番debug后发现似乎是promise将报错都吞掉了。。。

将promise替换成ts-promise就好了

function replacePromise() {
   local.Promise = tsPromise;
    try {
        tsPromise.onPossiblyUnhandledRejection((promise) => {
            promise.catch((error) => {
                if (error) {
                    return errorReport.reportError(error);
                }
                try {
                    return errorReport.reportError(`Possibly unhandled promise rejection`);
                } catch {	
                	 errorReport.reportError(e);
                }
            });
        });
    } catch (e) {
        errorReport.reportError(e);
    }
}

这样sentry就能正常的收到报错信息了

然鹅

ts-promise会导致sourcemap打包失败。。。

先这样吧= =

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rainbow oreo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值