普通日志收集
主进程
log4js
下载依赖
1 | npm install log4js --save |
工具类
1 | const log4js = require('log4js'); |
开发时在Console窗口中显示日志
1 | log4js.getLogger('myLogConsole'); |
正式部署后改为
1 | log4js.getLogger('myLogFile'); |
使用
1 | const logger = require('./assets/js/MyLog').logger; |
logger对象暴露到全局(main.js)
1 | global.zlog = logger; |
注意
使用Electron和Webpack结合的时候,建议日志在
main.js
中引用,页面中通过ipc方式进行调用。工具类
MyLog.js
我是配置在assets/js/MyLog.js
。package.json中配置build下的files配置。
package.json
1 | { |
Electron-log(推荐)
Electron-log日志记录工具
首先我们安装依赖:
1 | npm i electron-log --save |
在项目里面引入依赖项:
1 | const zlog = require('electron-log'); |
然后在我们的主线程加入以下代码:
1 | zlog.info('这是个提示日志'); |
electron-log supports the following log levels:
1 | error, warn, info, verbose, debug, silly |
以上代码通过不同级别记录日志,默认情况下会在控制台打印出和保存到本地文件,
日志默认保存在app.getPath('userData')
目录下的log.log
文件中,
这个时候你会发现日志的时间和日志级别,日志内容都记录下来了,有这些信息我们就可以更好的跟踪bug等信息了。当然这个依赖不止这些功能:
我们可以设置log路径和文件名:
1 | zlog.transports.file.resolvePath = () => path.join(filepath, filename); |
我们可以格式化日志内容:
1 | zlog.transports.file.format = '[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}] {text}' |
也可以通过log.transports.file.level
和log.transports.console.level
来分别设置日志输出目标和日志输出等级。
如果想禁止Console中输出可以设置对应项为false
1 | zlog.transports.file.level = true; |
虽然有了这些日志信息,但是都在不同用户的电脑上,我们可以开发一个程序,在适当的时候把用户日志传送到web服务器上去,这样让我们更好的跟踪!
渲染进程
工具类
1 | const remote = window.require("electron").remote; |
页面中引用
1 | import {logger} from "./assets/js/mylog"; |
主进程网络日志
Electron有主进程和渲染进程,一般呢我们通过渲染进程的控制台network就可以看到程序发起的网络请求。但是使用这个方法呢会有三个问题:
无法监控主进程发起的网络请求;
Electron呢可能会有多个窗口,不同的窗口发起不同的请求可能存在关联关系,就需要联合监控,就非常麻烦。
无法精确的分析某个时段的网络请求。
为了弥补这方面的不足,Electron提供了netLog模块,允许开发人员通过编程的方式记录网络请求。
1 | const { remote } = require('electron') |
netLog模块是一个主进程模块,所以我们需要通过remote来使用他,
它的startLogging接收两个参数,第一个参数是日志文件记录的路径,也可以通过app.getPath('userData')
来指定路径,第二个参数是一个配置对象,具体参考文档。
接着我们发起一个网络请求,得到响应后,我们通过stopLogging()来停止网络监控。
tips: 低版本的Electron可以使用以下方法:
app.commandLine.appendSwitch('log-net-log', 'net-log')
,net-log为文件名称,可以自定义,文件会保存在项目根目录下,
也可以根据app.commandLine.hasSwitch('log-net-log')
查看网络日志开关是否被打开,返回true
或false
崩溃日志收集
官方文档:https://www.electronjs.org/docs/api/crash-reporter#crashreporter
1 | const {crashReporter} = require('electron') |
可以调用以下方法模拟崩溃
1 | process.crash() |
官方说可以设置崩溃日志的目录,但是我这里设置无效
1 | let logpath = path.resolve(app.getPath("documents") + '/myblog/logs/'); |
官方说的设置uploadToServer:false
,就不需要设置submitURL
,但是实际测试并非如此。
另外这种方法生成的错误日志也没法通过文本文档查看,所以我就没有使用。
但是我们可以监听事件child-process-gone
https://www.electronjs.org/docs/api/app#%E4%BA%8B%E4%BB%B6-render-process-gone
代码
1 | const { app } = require('electron') |
崩毁重启
1 | import { BrowserWindow, app, dialog} from 'electron'; |