Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Iceworks 高稳定性之日志治理 #1703

Closed
alvinhui opened this issue Mar 27, 2019 · 3 comments
Closed

Iceworks 高稳定性之日志治理 #1703

alvinhui opened this issue Mar 27, 2019 · 3 comments

Comments

@alvinhui
Copy link
Collaborator

@alvinhui alvinhui commented Mar 27, 2019

当前的情况

程序日志:

  • 主进程
    • alilog.report(sls): 上传错误信息到阿里云 SLS
    • logger(electron-log@2.x)
      • report: 用户数据采集,发送 POST 请求到 aplus
      • info
      • error
      • debug
    • console: 控制台输出
      • log
      • error
    • debug
  • 渲染进程
    • console
      • log
      • info
      • error
      • debug
    • 主进程.alilog.report
    • 主进程.logger
      • report
      • info
      • error
      • debug

问题

日志缺乏收敛和治理,其带来的问题是:

  • 开发阶段难以进行高效的调试;
  • 用户故障产生后难以根据用户日志定位问题;
  • 渲染进程与主进程间增加了冗余的 RPC 通讯;

优化方案

使用electron-log 封装为 logger 对象供上层调用,启用三种 transport:

  • console(控制台)

  • file(本地文件)

  • remote(远程):

    • main: 使用 sls
    • renderer: 使用 arms

各进程的处理

渲染进程:

  • 使用 ARMS :从页面打开速度(测速)、页面稳定性(JS Error)和外部服务调用成功率(API)这三个方面监测渲染层的健康度;

    image

  • 信息等级及存储位置:

    • console: >=silly 
    • file(YYYY-MM-DD-render.log): >=info
    • remote(arms): >=error
  • 封装 goldlog.record 用于进行用户行为数据采集,明确采集的行为类型(常量化);

主进程:

  • 使用 SLS
  • 信息等级及存储位置:
    • console: >=silly
    • file(YYYY-MM-DD-main.log): >=info
    • remote(sls):  >=info

SLS 参数规约

  • __topic__: info/warn/error;
  • message: 日志详情;
  • platform: 来源平台;
  • iceworks_version: Iceworks 版本;
  • error_ stack: 错误堆栈;
  • error_ data: 错误对象;
  • error_name: 错误信息名。

错误处理及分类

const err = new Error('xxxx');
err.name = 'xxxx';
logger.error(err);

name 需常量化。

崩溃日志处理

本期不做处理。

参考:https://github.com/electron/electron/blob/v2.0.18/docs/api/crash-reporter.md

实施步骤

主进程:

  • 封装 logger,设置 transport;
    • console.x => logger.x;
    • debug => logger.debug;
    • alilog.report 替换为 logger.error;
  • logger.report => glodlog.record
  • 移除 debug 依赖,升级 electron-log 依赖。

渲染进程:

  • 封装 logger,设置 transport:
    • services.log.x => logger.x;
    • console.x => logger.x;
  • 移除 services.alilog;
  • services.log.report =>services.goldlog.record
  • 在页面的 HTML 脚本, 引入 arms。
  • 升级 electron-log 依赖。
@chenbin92

This comment has been minimized.

Copy link
Collaborator

@chenbin92 chenbin92 commented Mar 27, 2019

@alvinhui 治理之后应该是所有数据都上报到阿里云了吧? 包括现在的黄金令箭数据采集部分,异常错误部分等整个日志系统

@alvinhui

This comment has been minimized.

Copy link
Collaborator Author

@alvinhui alvinhui commented Mar 28, 2019

@chenbin92

  • 渲染进程
    • error 上传到 arms
    • 黄金令箭属于用户数据采集部分,上报到 aplus
  • 主进程
    • info,debug,error 上传到 sls
@chenbin92

This comment has been minimized.

Copy link
Collaborator

@chenbin92 chenbin92 commented Apr 3, 2019

MR: #1743

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants
You can’t perform that action at this time.