使用Raygun来自动追踪AngularJS中的异常


Posted in Javascript onJune 23, 2015

Angular.js取得的巨大成就之一是实用的异常抛出,因为异常信息经常能够准确的表明你的代码为什么崩溃了。运行于世界各地的众多浏览器的大型客户端web应用会面临异常丢失的问题,而捕获它就有可能修复 bug并赢得用户。

当处理跨浏览器和设备的问题时,接收这些异常信息是很重要的,因为你的应用可能在你的开发机器上运行得正确可靠,但在你的用户的浏览器上却是另一番场景。

其解决方案是需要一个自动异常跟踪服务,而Raygun通过接收你的Angular web应用抛出的所有异常但不需要你做任何事,从而简化了这项工作。它的设置真的很快--只需要按照以下步骤将Raygun hook到你的应用就可以了。

安装

首先,下载小巧的Raygun4JS脚本,并把它添加到你的项目中。有3个途径获得:

通过Bower
 

bower install raygun4js

从NuGet获得——在Visual Studio中,打开包管理器控制台然后输入:
 

Install-Package raygun4js

手动下载 ? 点击此处下载dev版 或者压缩过的版本
配置

接下来,引用这个脚本。如果你使用静态的HTML,将<script src="js/raygun.js" type="text/javascript"></script>添加到页面里面或添加到你的模块加载器中。

最后,在你的Angular主逻辑执行之前调用下面的代码来设置Raygun4JS:
 

Raygun.init('YOUR_API_KEY').attach();

你可以为每一个用Raygun创建的app生成一个API key,你可以在你的Raygun dashboard 中访问他——你有30天免费试用时间来测试它。
在Angular中捕获异常

至少有两种方法将未处理的异常注射到Angular.js的模块中,通过使用decorator 或 factory。这两种方式会为你提供$exceptionHandler的具体实现,我们上面所提到的Raygun4JS会将该实现发送给Raygun。

使用一个装饰器

装饰器模式因其不会覆盖掉原有的行为,所以很适合用来将行为注入到任意的服务中,以确保在其它所期望的特性中分离关注点,它也是记录日志和处理异常的理想方式. 在Angular.js中它可以使用在 $provide 服务中,我们将用来实现我们自己的

$exceptionHandler 函数:
 
app.config(function ($provide) {
 $provide.decorator("$exceptionHandler", ['$delegate', function($delegate) {
  return function (exception, cause) {
   Raygun.send(exception);
   $delegate(exception, cause);
  }
 }])
});

$delegate 是异常处理器的实体,我们会调用它来获得输出到控制台的原始行为.

你也可以按照自己的需要创建足够多的其它服务:
 

$provide.decorator("$exceptionHandler", ['$delegate', '$log', function($delegate, $log) {
  return function (exception, cause) {
   $log.debug('Sending to Raygun');
   Raygun.send(exception);
   $delegate(exception, cause);
  }
 }])

依赖于所获取到的自Angular逻辑中抛出的错误是什么类型, cause 参数得以被填充. 如果一个异常发生在一个工厂或者服务中,你可能会得到那个参数可以的范围, 你可以将其作为自定义数据,通过替换掉上面的Raygun.send调用,附带任何你需要的其它东西,再传送到Raygun:
 

Raygun.send(exception, { cause: cause });

使用一个工厂

快速的将Raygun放到你的应用的异常处理器中的方法就是使用一个工厂, 尽管它会移除原来的控制台日志,而如果你想要保留此项功能的话,就会需要存储原来的值并再一次调用它.
 

app.factory('$exceptionHandler', function () {
 return function (exception) {
  Raygun.send(exception);
 }
});

手动发送错误

Raygun4JS 也归于了你任意时间很容易的手动跟踪错误的能力:
 

Raygun.send(new Error('my custom error'));

供应器上还有一堆其它使用的工具可以利用,包括独特的用户跟踪,版本跟踪,标签及其它 ? 这里的文档可以查看 的所有相信信息.

Raygun 甚至可以在你的Angular应用中跟踪jQuery 的Ajax错误even tracks jQuery Ajax errors ,而无需你的做任何额外的事情, 因此你将得到开箱即用的全面照顾.
准备好使用Raygun了吗?

如之前所提及的,有一个 30天免费的无信用卡支付的版本可用, 因此你可以获取一个来看看你的应用是否真的是在为你的用户运作的. 如果就本文你有任何的疑问,请将它们留在下面的评论中。

Javascript 相关文章推荐
JQuery-tableDnD 拖拽的基本使用介绍
Jul 04 Javascript
IE与FireFox的JavaScript兼容问题解决办法
Dec 31 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
Sep 04 Javascript
javascript 构造函数方式定义对象
Jan 02 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
Mar 01 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
Nov 18 Javascript
jQuery自动完成插件completer附源码下载
Jan 04 Javascript
jquery实现的判断倒计时是否结束代码
Feb 05 Javascript
巧用数组制作图片切换js代码
Nov 29 Javascript
js的OOP继承实现(必看篇)
Feb 18 Javascript
详解Javascript获取缓存和清除缓存API
May 25 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
Jan 08 Javascript
使用JavaScript的AngularJS库编写hello world的方法
Jun 23 #Javascript
浅谈setTimeout 与 setInterval
Jun 23 #Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
Jun 23 #Javascript
javascript中传统事件与现代事件
Jun 23 #Javascript
浅谈jquery中delegate()与live()
Jun 22 #Javascript
jquery 中ajax执行的优先级
Jun 22 #Javascript
jquery中ready()函数执行的时机和window的load事件比较
Jun 22 #Javascript
You might like
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
php 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
PHP设计模式之简单工厂和工厂模式实例分析
2019/03/25 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
JS面向对象编程之对象使用分析
2010/08/19 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
Python实现拼接多张图片的方法
2014/12/01 Python
浅谈Python中的数据类型
2015/05/05 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
Django中Aggregation聚合的基本使用方法
2020/07/09 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
美国留学经济担保书
2014/05/20 职场文书
员工试用期自我评价
2014/09/18 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
五一放假通知怎么写
2015/08/18 职场文书
MySQL Shell的介绍以及安装
2021/04/24 MySQL