概述
对于任何的客户端应用,开发者都希望能够在用户上的手上记录下相关信息以便了解真实的使用情况。
一般情况下,分为以下两种信息:
-
正常日志
在不涉及隐私的情况下,让开发者了解用户使用客户端的详细情况,从这些情况中提炼的信息能够让开发者根据用户的使用情况更好地优化产品
-
崩溃日志
用户的使用环境千差万别,有时候可能会让客户端崩溃。崩溃日志的收集,有利于让开发人员更好地定位,解决问题
对于日志的处理,一般分为 收集 、上报、分析等多个步骤,本文主要细分讲述 Electron 客户端应用的日志收集步骤
正常日志收集
流程
正常日志,可以理解成能够被开发者应用代码正常捕获的行为日志
按照 Electron 应用的结构,日志收集的结构情况如下图:
解释:
-
main process 为主进程,render processes 为各个窗口的渲染进程
-
logger 为 main process 下的日志收集组件,可以把收集到的日志信息保存到本地 和 上报到远程服务器
-
Electron.remote 是 Electron 框架自带的对象,可以作为主进程与渲染进程的桥接,让渲染进程能够访问到主进程的 logger 组件,底层原理是基于 ipc 信息的封装
-
render processes 通过 Electron.remote 访问到 logger,然后就可以把自己的日志信息通过 logger 进行收集
-
渲染进程中的 worker 和 service worker 比较特别,它们是独立于渲染进程,无法直接从 Electron.remote 中访问 logger,但是它们可以通过 ipc message 把日志信息传递到特定的渲染进程,然后再通过渲染进程通过 logger 记录日志信息
-
主进程下的子进程 child processes,无法直接访问 Electron.remote,通过 ipc message,可以把收集的日志信息传递给主进程,主进程再通过 logger 记录日志信息
方案
-
针对应用的需求,设置好 logger 组件
/** * @param {string} level * @param {string} text */ function log(level, text) { var