不管使用哪个语言做项目开发,我们都会自觉地用日志来做相关记录。比如,HTTP请求,报错信息、某些关键节点埋点记录等等。在Java中有大名鼎鼎的Log4J,于是在Node.js中也有了log4js。

日志很此重要,然而再多次用户反馈之后才发现错误已经出现很久,并且折腾了半天也没有解决问题之后,意识到日志并没有想象中方便。

1. 内容超载

当访问量变大之后,每秒钟日志都是成百上千条。并且各种类型的日志都记载在里面。在查看日志的时候不得不反复前后翻看错误的关联日志信息,同时还要略过大量无关信息。本来是个简单的问题,都被复杂化了。

2. 信息分散

当访问量再大到一定程度,又构建了集群,N多台机器都在记录日志。于是,我们又需要将这些日志定期整合起来,使得原本就杂乱的信息更加杂乱。

3. 滞后性

因为日志太多,往往最先发现问题的不是我们。还是客户的反馈,最终使得我们去通过日志来排查。所以,导致解决问题不及时。

怎么办呢?

日志是个大数据,而错误是这个大数据中的小数据。所以,如果能够很好地去处理错误这个小数据,就能有效的解决问题了。于是,我们使用了Fundebug的Node.js异常监控服务。可以说是分分钟搞定问题。

为什么这么说呢?因为它提供了npm安装模块,并且使用非常方便。只需要引入该模块,并配置好apikey就可以了。

有什么优点呢?

  • a) 只抓取异常数据,小而美;
  • b) 提供主动报警,包括邮件、Slack、钉钉、倍洽等第三方工具;
  • c) 多服务器的数据统一发送到一个地方来分析,简单方便。

简单示例

接入指引

创建项目的时候,选择Express。

然后安装fundebug-nodejs模块,并复制代码到index.js中。

Hello World

我们用Express的Hello World来做一个示例,首先新建一个文件夹hello-world。然后,在Terminal中进入当前目录,并输入

npm init

安装express:

npm install express --save

新建index.js文件夹,并拷贝如下代码:

const express = require('express')
const app = express()app.get('/', (req, res) => res.send('Hello World!'))app.listen(3000, () => console.log('Example app listening on port 3000!'))

安装fundebug-nodejs

npm install fundebug-nodejs --save

按照配置,将下面的代码复制进去:

var fundebug = require("fundebug-nodejs");
// 记得修改YOUR-API-KEY
fundebug.apikey="YOUR-API-KEY";

将下面的代码放到app的定义后面:

// 放到app的声明后面
app.use(fundebug.ExpressErrorHandler);

完整的代码如下所示:

const express = require('express')
const app = express()// import fundebug
var fundebug = require("fundebug-nodejs");
fundebug.apikey="YOUR-API-KEY";

app.get( '/', (req, res) => res.send( 'Hello World!'))

app.listen(3000, () => console.log('Example app listening on port 3000!'))
// fundebug error handler
app.use(fundebug.ExpressErrorHandler);

接下啦,我们故意在代码中造一个错误试试。

const express = require('express')
const app = express()// import fundebug
var fundebug = require("fundebug-nodejs");
fundebug.apikey="YOUR-API-KEY";

app.get( '/', (req, res) => res.send( 'Hello World!'))

app.listen(3001, () => console.log('Example app listening on port 3000!'))
// fundebug error handler
app.use(fundebug.ExpressErrorHandler);
// Test caselet test = [];
test[0].hello()

运行node index.js,立马就会收到报错:

为了模拟更加真实的报错,我假装在路由的处理函数中写个bug:

const express = require('express')
const app = express()// import fundebug
var fundebug = require("fundebug-nodejs");
fundebug.apikey="YOUR-API-KEY";

app.get( '/', (req, res) => res.send( 'Hello World!'.len.len))

app.listen(3001, () => console.log('Example app listening on port 3000!'))
// fundebug error handler
app.use(fundebug.ExpressErrorHandler);

收到的报错如下所示:

为了方便排查问题,还可以配置用户(user)和metaData。报警也可以接入很多第三方,具体我就不详细介绍了。

暂时就介绍这么多吧!

作者:害羞
链接:https://juejin.im/post/5af39e4f6fb9a07a9f018d73
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

高效利用Fundebug追踪Node.js日志发现问题相关推荐

  1. Fundebug后端Node.js插件更新至0.2.0,支持监控Express慢请求

    摘要: 性能问题也是BUG,也需要监控. Fundebug后端Node.js异常监控服务 Fundebug是专业的应用异常监控平台,我们Node.js插件fundebug-nodejs可以提供全方位的 ...

  2. 【译】Node.js 日志打印指南

    当你开始使用JavaScript开发时,可能要学习的第一个技能就是如何使用console.log将内容打印到控制台.如果你搜索如何调试JavaScript,将会发现数百篇博客和StackOverflo ...

  3. 利用Docker设置Node.js

    docker是一个开源的应用容器引擎,可以为我们提供安全.可移植.可重复的自动化部署的方式.docker采用虚拟化的技术来虚拟化出应用程序的运行环境.如上图一样.docker就像一艘轮船.而轮船上面的 ...

  4. Node.js日志记录指南

    当你开始用 JavaScript 进行开发时,可能学到的第一件事就是如何用 console.log 将内容记录到控制台.如果你去搜索如何调试 JavaScript,会发现数百篇博文和 StackOve ...

  5. Elasticsearch:使用 Filebeat 从 Node.js Web 应用程序提取日志

    本指南演示了如何从 Node.js Web 应用程序中提取日志并将它们安全地传送到 Elasticsearch Service 部署中. 你将设置 Filebeat 来监控具有标准 Elastic C ...

  6. 如何调试Node.js应用程序?

    如何调试Node.js服务器应用程序? 现在,我主要使用带有以下打印语句的警报调试 : sys.puts(sys.inspect(someVariable)); 必须有更好的调试方法. 我知道Goog ...

  7. 6分钟看懂 Node.js 武功精髓

    本篇来自[北妈的小北鼻]写手联盟 小北鼻作者:闹闹 阅读大约需要6分钟 1 为什么要学习Node.js? Node.js是目前非常火热的技术,可是作为一个前端开发人员,为什么要学Node.js? 说N ...

  8. 当Node.js遇见Docker

    Node.js Best Practices - How to Become a Better Developer in 2017提到的几点,我们Fundebug深有同感: 使用ES6 使用Promi ...

  9. node JS獲取GPS_node学习笔记(三十八)

    一.什么是NodeJS? 1.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. 2.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效 ...

最新文章

  1. 【代码笔记】Web-CSS-CSS id和Class选择器
  2. 清华大学人工智能研究院成立听觉智能研究中心,将专注基础研究和成果产业化
  3. 中文速读微生物组(宏基因组)前沿文献——这个可以有
  4. ASP.NET常见错误,原因及解决方法(2003版)_不断更新.....
  5. win2003系统服务器,windows 2003 server服务器蓝屏
  6. Windows Server AppFabric Caching
  7. python读取dicom格式的图像并转为png格式
  8. (笔记)java环境变量设置
  9. 人生苦短快用python_人生苦短,快用 Python
  10. [Android开源]EasyExecutor: 让线程任务的使用变得高效、安全、方便、灵活
  11. [SHOI2008]堵塞的交通
  12. 拖拽文件作为文件输入
  13. Linux 宏定义之 offsetof 与 container_of(十九)
  14. linux、mysql、nginx、tomcat 环境下压力测试的主要调试参数
  15. 不只是AlphaGo,谷歌DeepMind到底是何方神圣?
  16. 计算机cs怎么使用技巧,cs1.6如何添加电脑人【附快捷键命令】
  17. 安装系统时,提示无法安装到这个磁盘,选中的磁盘具有MBR分区表,在EFI系统上,windows只能安装到GPT磁盘的问题
  18. 超级大反派降临:当黑客可以摧毁人造卫星
  19. Android-GIF图片显示
  20. 离散-如何确定哈斯图极大极小元、最大最小元、最大最小上下界

热门文章

  1. Android 输入法键盘使用
  2. expecting IDENT错误解决办法
  3. AMD狂打鸡血逼Intel“觉醒” Zen 2架构首曝光
  4. php 调用天气接口
  5. AWS marketplace 卖家使用指南
  6. [译]Effective Kotlin系列之考虑使用原始类型的数组优化性能(五)
  7. DVD(驱动器或者视频播放器)
  8. 关于添加pdf水印那些事
  9. java rowmapper 通用实现_06.Teambiz中三种特殊RowMapper的使用
  10. 相机标定教程(使用Matlab工具箱)