OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

如何收集捕获Node中的未处理的错误异常信息?


分享到
分类 JS学习   关键字 Node.JS   发布 ourjs  1521167656928
注意 转载须保留原文链接,译文链接,作者译者等信息。  

因为我们的产品主要是以js栈为主,下面来讲一下我们实践。

e.stack 异常栈

node.js是出错异常了,最关键是要知道哪错了。stack是error很重要的一个属性,可以帮助我们了解代码到底是执行哪一行出错了,比如某个error 的 stack:

Error: "start" option must be <= "end" option
    at new ReadStream (fs.js:1931:13)
    at Object.fs.createReadStream (fs.js:1885:10)
    at /var/www/oncedoc/mod/onceoa-oncedoc/svr/onceoa.web.js:1:2315
    at FSReqWrap.oncomplete (fs.js:123:15)

Node.JS异常处理

node.js 因欺回调的特性,一般采取错误前置的写法(Error First),即回调中第一个参数就为错误信息。在这个时侯可以直接将错误输出到 stderr 的命令行日志中,方便从日志中分析。

var getFolderTree = function(folderPath, tree, cb) {
  fs.readdir(folderPath, function(err, files) {
    if (err) {
      console.error(err)
      cb && cb(err, tree)
      return
    }

Node.JS未知异常捕获

因为是动态脚本语言,但有时也会漏掉异常捕获,这几乎是无法避免的,这时就可以在uncaughtException 中借助 e.stack 打印调出用栈。将未捕获的异常其找出来。

process.on('uncaughtException', function (err) {
  /*
  console.error may not exist in some version of node
  https://github.com/nodejs/node/issues/4467
  */

  if (typeof console.error === "function") {
    console.error((err || '').toString())
    console.error(err.stack || '')
  } else {
    console.log((err || '').toString())
    console.log(err.stack || '')
  }
})


将异常写入日志

这是最关键的一步,上面我们已经将所有的 error 都输出到了 stderr 中,这时侯就要从命令行写入日志文件,在linux中调用node程序时可以这样简单实现:

while true; do
    {
        /usr/local/bin/node /var/www/oncedoc/svr/oncedoc.js config.live.js
        echo "OnceDoc stopped, restarting \r\n\r\n"
    } 2>> /var/www/oncedoc/error.log
    sleep 1
done

2 代表是 stderr 中的错误信息,可以调成 1 或 0,此时可以输出所有日志。

将这段脚本加入自动启动服务即可。

这段代码也有一定的缺陷,会block住当前的shell脚本,在实践中,我们会以一个node.js service启动另一个service,类似 forever,即守护进程。

并且我们将所有session都放入了redis,即使发生异常,也能瞬间重启,让用户感觉不到。

然后每隔一段时间排查错误日志,即可消除node中的所有异常。

社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. 用jQuery创建一个可编辑的SELECT下拉控件(HTML/CSS)
  2. 全国211高校数量最多省市排名:北京、上海、南京、武汉、西安最多,附高考难易地图
  3. Node.JS段点续传:Nginx配置文件分段下载功能实现
  4. 如何用Bootstrap免费网站模板和OnceAir云盘搭建个人网站服务器
  5. Node.JS如何查看本地MAC/IP地址、计算cpu使用率和内存容量
  6. Node.JS高效压缩解压zip文件:将child_process执行结果输入stdout流
  7. IE、Chrome、Firefox浏览器默认首页被改成360导航解决办法(删除daohang88.com)跳转
  8. OnceAir自动考勤系统,无需手机签到打卡,轻松管理记录员工出勤信息
  9. Node.js 和 JavaScript 的最新版 npm 导致 Linux 系统崩溃,迫使用户重装系统!
  10. Node.JS循环删除非空文件夹及子目录下的所有文件
  11. AirJD-简单好用的免费建站工具

 相关阅读 - JS学习
  1. Node.JS循环删除非空文件夹及子目录下的所有文件
  2. Node.js 和 JavaScript 的最新版 npm 导致 Linux 系统崩溃,迫使用户重装系统!
  3. 用jQuery创建一个可编辑的SELECT下拉控件(HTML/CSS)
  4. 如何用Bootstrap免费网站模板和OnceAir云盘搭建个人网站服务器
  5. Node.JS高效压缩解压zip文件:将child_process执行结果输入stdout流
  6. Node.JS段点续传:Nginx配置文件分段下载功能实现
  7. Node.JS如何查看本地MAC/IP地址、计算cpu使用率和内存容量
  8. JavaScript数组从头开始的位置插入新元素或删除第一个元素
  9. Node.JS中UDP打洞穿透内网路由,架设内网服务器技术详解及源码
  10. 移动端开发框架哪个好?jQuery/Vue/AngularJS有哪些区别和优缺点?

 关键字 - Node.JS
  1. Node.JS如何查看本地MAC/IP地址、计算cpu使用率和内存容量
  2. Express入门教程:一个简单的博客
  3. 在nodejs中使用Redis缓存和查询数据及Session持久化(Express)
  4. 如何收集捕获Node中的未处理的错误异常信息?
  5. trim-html:NodeJS的HTML文本截取库(自动生成正文摘要)
  6. Node.JS循环删除非空文件夹及子目录下的所有文件
  7. Node.js 和 JavaScript 的最新版 npm 导致 Linux 系统崩溃,迫使用户重装系统!
  8. [译]Node.js 框架比较: Express vs. Koa vs. Hapi
  9. 如何用Bootstrap免费网站模板和OnceAir云盘搭建个人网站服务器
  10. 沃尔玛为什么要采用Node.js

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号