客户使用我们的oss js sdk开发应用产品时,一旦产品面向广大用户,由于产品运行在不同的终端,用户的操作千差万异,用户一旦在前端遇到问题时,反馈给客户,客户由于没有相关日志信息只能靠猜测,而且很难模拟用户当时的操作环境,问题也很难定位,站在客户角度很希望有一套东西能够协助解决这种场景。对于SDK提供方来说,我们坚决不收集用户信息,这是我们的责任。但是客户希望用户操作发生异常的时候,能够把相关信息进行收集,方便问题定位和重现。事实上我们提供的调试信息也是客户需求的。因此我们提供方案,把调试信息的接口报漏出来。至于如何收集这些信息,如何上传这些信息,这些都是客户需要做的东西,我们可以提供参考代码,客户根据自己的场景自由选择,自己收集自己上传,至于上传到哪里,哪个日志平台还是客户自己的日志分析平台,他们自主选择。这样无疑会给客户提供一定帮助。
在js sdk原来的调试信息里面把调试信息加入级别备注,比如warning 、error、success等,然后挂载到我们js sdk暴露出的对象原型上,业务方(也就是我们的客户)在业务代码中劫持debug函数信息,如何劫持看下文,然再结合第三方日志收集工具比如logline把日志收集到localstoreage 、indexed db 、或者websql中,客户可以根据logline提供的功能,可以选择存储日志的方式、记录日志、读取日志、清除日志等,关于如何上传日志,只需要通过获取日志后,业务方自己写逻辑就可以了,当然建议使用阿里云的STS服务,更加强大、稳定、可靠。
在js sdk把debug函数暴露到实例原型上,同时debug函数里面把调试信息加入级别备注,比如warning 、error、success等,目前已经代码提交到6.X系列版本。
下面是基于ali-oss 6.x版本,告诉用户如何收集日志,可控制存储什么级别的日志,如何获取日志为例进行演示,用户获取日志后可自行撰写上传逻辑。注意:js sdk源码中debug函数最后一个参数是控制日志的级别的目前就三个info、waring 、error三种。
同时调用logine并选择一种方式存储日志信息。示例代码如下。
/ 引入ali-oss 6.X
const OSS = require('ali-oss');
// 日志收集引入第三方日志收集工具logline
const Logline = require('logline');
// 选择日志协议,web端主要有三种存储方式:websql、indexeddb、localstorage
Logline.using(Logline.PROTOCOL.LOCALSTORAGE)
const sdkLog = new Logline('sdk');
// 劫持OSS.prototype.debug上的日志
const _debug = OSS.prototype.debug;
OSS.prototype.debug = (...params) => {
console.log(...params);
// 获取params最后一个参数的数值是info还是error,如果是info就调用sdkLog.info error的话就调用 sdkLog.error
const info = params[params.length - 1];
// 解析params参数 ["request %s %s, with headers %j, !!stream: %s", "GET", "http://luozhang002.oss-cn-zhangjiakou.aliyuncs.com/?max-keys=100", {…}, false, "info"]
// 规则是 %s 或者%s, 替换 字符, %j 或者%j ,替换为对象, 或者把%j对象单独打印出来
// 解析逻辑 (开发者也可以自己写,这里先提供简单的解析代码,可供参考)
// 最终要存储的总的信息 params.length的长度约定的至少为2,为2 直接取第一个,其他的长度需要另外处理
let resultInfo = '';
if (params.length === 2) {
resultInfo = params[0];
} else {
let k = 1;
const firstInfo = params[0].split(' ');
const newInfo = [];
for (let j = 0; j < firstInfo.length; j++) {
if (firstInfo[j] === '%s' || firstInfo[j] === '%s,') {
newInfo.push(params[k]);
k++;
} else if (firstInfo[j] === '%j' || firstInfo[j] === '%j,') {
newInfo.push(JSON.stringify(params[k]));
k++;
} else {
newInfo.push(firstInfo[j]);
}
}
resultInfo = newInfo.join(' ');
} // end else
if (info === 'info') {
sdkLog.info('info', resultInfo);
} else {
sdkLog.error('error', resultInfo);
}
// 之前debug的逻辑还是保留的,localstoreage.debug = 'ali-oss'
_debug(...params);
};
collect all logs
Logline.all(function(logs) {
// process logs here这里可以获取到所有的日志是一个大数组,用户可以自行把数据上传到任何地方OSS、STS或者其他日志分析系统
console.log(logs)
});
// collet logs within .3 days
Logline.get('.3d', function(logs) {
// process logs here
});
在浏览器端客户如果想收集日志信息,开发者需要在业务代码中劫持debug函数信息,再结合第三方日志收集工具比如logline把日志收集到localstoreage 、indexed db 、或者websql中,然后再获取日志。
Original url: Access
Created at: 2018-10-31 20:01:51
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论