引言:作为软件开发者,应用程序的异常是再稀疏平常不过了。那么,您怎么才能准确发现到用户为何会碰到了问题、具体错误在哪里、甚至是应用程序如何崩溃的呢?
众所周知,软件开发既具挑战性,又比较复杂。具体来说,无论我们是在开发登录页面的app还是Linux的内核驱动程序,软件都需要记录各种信息,并做大量的分析。 在上述这些信息中,如果您想找出为什么用户会碰到某个问题、具体错误在哪里、甚至是应用程序如何崩溃的话,分析它们的异常是必不可少的。 让我们先来看看下面的例子,异常消息显示了由于数据库表--tblmovies未被找到,所以异常PDOException被抛出。在此,您还能看到它是从初始点开始,执行到一个类的具体某行时所抛出的异常(我们已经将其编辑为可阅读的形式)。 PDOException thrown with message"SQLSTATE[HY000]: General error: 1 no such table: tblmovies". Stacktrace: #28 PDOException in/Users/settermjd/Documents/Business/Projects/Zend ExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Statement.php:186 #27 PDO:prepare in/Users/settermjd/Documents/Business/Projects/Zend ExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Statement.php:186 #26Zend\Db\Adapter\Driver\Pdo\Statement:prepare in/Users/settermjd/Documents/Business/Projects/Zend ExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Statement.php:212 #25Zend\Db\Adapter\Driver\Pdo\Statement:execute in/Users/settermjd/Documents/Business/Projects/Zend ExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-db/src/TableGateway/AbstractTableGateway.php:239 #24 Zend\Db\TableGateway\AbstractTableGateway:executeSelectin /Users/settermjd/Documents/Business/Projects/Zend ExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-db/src/TableGateway/AbstractTableGateway.php:209 #23Zend\Db\TableGateway\AbstractTableGateway:selectWith in/Users/settermjd/Documents/Business/Projects/Zend ExpressiveCourse/book-code/iteration-five/src/Movies/src/Services/Database/MovieTable.php:48 ... #5Zend\Stratigility\Middleware\ErrorHandler:process in/Users/settermjd/Documents/Business/Projects/Zend ExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-expressive/src/Middleware/LazyLoadingMiddleware.php:60 #4Zend\Expressive\Middleware\LazyLoadingMiddleware:process in/Users/settermjd/Documents/Business/Projects/Zend ExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-stratigility/src/Next.php:128 #3 Zend\Stratigility\Next:process in/Users/settermjd/Documents/Business/Projects/Zend ExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php:102 #2 Zend\Stratigility\MiddlewarePipe:processin /Users/settermjd/Documents/Business/Projects/Zend ExpressiveCourse/book-code/iteration-five/vendor/zendframework/zend-expressive/src/Application.php:374 #1 Zend\Expressive\Application:run in/Users/settermjd/Documents/Business/Projects/Zend ExpressiveCourse/book-code/iteration-five/public/index.php:29 #0 {closure} in/Users/settermjd/Documents/Business/Projects/Zend ExpressiveCourse/book-code/iteration-five/public/index.php:30 那么您的应用程序也会记录这些信息,而且能够记录到一个集中存储的日志区域吗?如果是这样的话,它们: · 所记录的信息容易被获取得吗?
·
· 是否能够被有效地进行解析?
·
· 您是否能回溯到问题的提交源头(和提交者)呢?
·
· 它是否提供了额外的元数据和有助于理解的提示呢?
·
· 是否会包含个人身份信息(PII)、凭证、或其他任何形式的且需要进行安全加固的信息呢?
·
如果不能够满足上述所有、或者至少是大部分问题的话,这就会存在问题的隐患。在此,您可以通过阅读本文,了解到四款在线的异常跟踪服务。请注意,我们的罗列并无特别的优先顺序。 Raygun 承蒙可口可乐、微软、Slack和3M的赏识,Raygun能为各种应用异常的跟踪提供时髦且专业的用户界面(UI)。由于已有现成且详尽的指导性文档,Raygun很容易被上手。 除了基本的安装设置文档之外,Raygun还能为其各个方面的服务提供大量的扩展文档(https://raygun.com/docs)。其中包括: · 设置审计日志。
·
· 管理用户和组。
·
· 配置集成(其中包括Bitbucket、PivotalTracker、Visual Studio Team Services、Zendesk、Slack、YouTrack和Trello)。
·
· 各种API和网络钩子。
·
Raygun能够支持各种语言、平台和框架。这些包括PHP、.Net、安卓、iOS、MacOS、WordPress、Java、Python、Cold Fusion和C++。 Raygun所提供的服务主要集中在两个方面:崩溃报告(crashreporting)和真实用户监控(real user monitoring)。崩溃报告旨在通过查找,来了解和修复那些造成应用崩溃的各种异常。对于每一个被发送到Raygun的异常,它们会被分解和重新组织,并且根据如下条目进行分类显示: · 何时发生的
·
· 发生在哪个页面上
·
· 异常的消息体本身
·
· 发生的区域
·
例外可以通过各种类型的标准来进行过滤,其中包括浏览器类型、操作系统类型、宿主机以及机器名等。而真实用户监控,则是从另一个方面,提供了有关应用是如何被执行的细节,包括如下的度量维度(如果适用的话): · 平均加载的时间
·
· 页面加载的时间
·
· 客户数与浏览量
·
这种功能可帮助用户跟踪每一个部署对应用程序的影响,是正面还是负面的。同时,用户的仪表板界面也能够被完全定制,以满足您的项目和团队的需要。具体包含的细节包括: · 加载时间
·
· 全局会话的分布
·
· 活动使用用户
·
· 会话数量
·
· 总用户数
·
· 新用户数
·
· 返回的用户数
·
· 平均加载的时间
·
它的另一个便利的特点是Pulse。Pulse能够表明通过各种接近实时的事件,来显示当前网站的各种用户状态。通过它所提供的视图,您可以详细地查看到如下的信息: · 加载的时间
·
· 各种会话的数量
·
· 各类用户的数量
·
· 24小时内的会话趋势
·
· 那些最近的请求
·
· 平均加载的时间
·
· 那些请求最多的网页
·
· 那些最近的崩溃
·
如果您深入到页面的级别,您还可以得到诸如为何页面表现不佳之类的综合信息,其中也包括DNS的查询、延迟、SSL的开销、页面生成以及传输的时间。