• 【转】高效利用Fundebug追踪Node.js日志发现问题


    不管使用哪个语言做项目开发,我们都会自觉地用日志来做相关记录。比如,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 case
    let 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
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Python踩坑总结
    you-get下载酷我音乐付费歌曲
    Windows下python2和python3共存时pip失效(pip找不到)的解决办法
    正负混合排序,正数在前,负数在后
    用Python做窗口化滚动点名系统
    sublime3自定义快捷键运行python,支持input()函数
    python中字典,没键加键,有键操作其键对应的值,的思想
    python可变容器类型做函数参数的坑
    Ascii码 unicode码 utf-8编码 gbk编码的区别
    python文件操作各种模式和常用方法总结r r+ rb r+b
  • 原文地址:https://www.cnblogs.com/curationFE/p/fundebug_nodejs_log_handling.html
Copyright © 2020-2023  润新知