第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

使用 Serverless 搭建的前端錯(cuò)誤日志及事件收集系統(tǒng)

標(biāo)簽:
JavaScript 前端工具

原标题:Molog:使用 Serverless 搭建的前端错误日志及事件收集系统

最近在交接项目,也因此有了一些时间。之前想过做一个前端的错误日志系统,便想着直接用 Serverlss 做了好了。

开始之前先让我简单地介绍一下:https://github.com/phodal/molog,以便于了解我们的需求及功能。

Molog 使用

先让我们看看最后要怎么用,在网页上引入:

<script data-component="homepage" data-env="dev" class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="http://static.pho.im/molog.min.js"></script>

顾名思义,其中的 component 针对的不是不同组件的名字,而 env 便是具体的环境。

前端的代码是基于 sherlog.js,因此在事件上也是差不多的:

Molog.push({field: 'xxx', action:' '}, function() { })

Serverless 错误收集系统架构设计

在之前的文章中,我们讨论过错误日志收集是一个很好的 Serverless 应用使用场景。

架构设计

事实上,这样的系统很简单:

1.前端通过 window.onerror 来捕获错误日志

window.onerror = function(message, source, lineno, colno, error) {
 ... 
}
  1. 然后将错误日志发给 AWS Lambda 来处理

  2. AWS Lambda 将数据存储到 AWS DynamoDB 数据库里

  3. 当用户打开后台时,从 AWS DynamoDB 获取相应的数据

  4. 前端的静态文件,通过 S3 + Cloudfront 作为 CDN 来分发前端资源

Molog 系统实现

1. 存储日志和事件

要在 AWS 上实际这样的系统,就便得很简单了。我们只需要存储一下这些数据即可,相关的存储逻辑如下所示:

  const params = {
    TableName: process.env.DYNAMODB_TABLE,
    Item: {
      id: uuid.v1(),
      data: JSON.stringify(event.queryStringParameters),
      env: env,
      component: component,
      createdAt: timestamp
    },
  };

这里的 env 和 component 是在 script 标签中遍历解析出来的:

env: function() {  var s = doc.getElementsByTagName('script')
    , env;  for( var i = 0, l = s.length; i < l; i++) {    if (s[i].src.indexOf('molog') > -1) {
      env = s[i].getAttribute('data-env');      break;
    }
  }  this.env = env || '';
}

然后,再将这个 URL 放置到 POST 的 URL 中,即 serverless.yml 的配置文件中:

functions:  create:    handler: create/index.handler
    events:
      - http:
          path: /{component}/{env}/
          method: get
          cors: true

从 URL 中获取这些相关的参数

2. 读取日志

有了上面的基础,有读取日志也很简单,首先配置好 URL:

  list:    handler: list/index.list    events:
      - http:
          path: /{component}/{env}/logs
          method: get
          cors: true

然后从数据库中获取这些结果:

  const params = {    TableName: process.env.DYNAMODB_TABLE,    FilterExpression: 'env = :env and component = :component',    ExpressionAttributeValues: {      ':env': env,      ':component': component,
    }
  };
  dynamoDb.scan(params, (error, result) => {    const response = {      statusCode: 200,      headers: {        "Access-Control-Allow-Origin" : "*" // Required for CORS support to work
      },      body: JSON.stringify(result.Items),
    };
    callback(null, response);
  });

这样就可以得到相关的日志了。

问题

就这么简单,发现由于 CloudFront 在国内有点水土不服,并且提供压缩的功能,导致加载速度有点慢。


點(diǎn)擊查看更多內(nèi)容
4人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消