cocos creator接入sentry"/>
cocos creator接入sentry
cocos creator接入sentry
有很长时间没有写过东西了,最近闲来无事,随便写点东西
上次写东西仿佛还是大学的时候。。。
毕业之后一直在做幼儿教育类的app,从认字做到数学再到音乐,经历了不少的项目,确实学到了很多东西。
现在市面上的教育类app还是挺多的(小朋友的钱好赚呀。。。)
大部分项目用的都是cocos creator+typescript
啊 不废话了 今天来说说 sentry
sentry是一个前端错误监控系统,实际项目中还是很好用的,实时监控到项目中发生的报错,如果遇到严重的错误,立马热更修复掉,能将影响用户数尽量降到最低。
1.首先是安装
通过docker安装sentry还是很方便的,docker的安装这边就不多做赘述了,直接开搞。。。
需要注意的是,sentry需要服务器至少有2400M的RAM
//克隆sentry
git clone .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打包失败。。。
先这样吧= =
更多推荐
cocos creator接入sentry
发布评论