前言
我们在维护Electron项目的时候,会出现一些程序崩溃和卡死的情况,这个时候我们是看不到后台的日志的。导致程序崩溃的原因有很多,我们需要将日志写在本地,这样才能一步步排查出问题。这就引出了文章主要介绍的electron-log
// 引入electron-log
const log = require('electron-log')
日志文件名
默认:main.log
log.transports.file.fileName = 'main.log';
日志文件位置
on Linux: ~/.config/{app name}/logs/main.log
on macOS: ~/Library/Logs/{app name}/main.log
on Windows C:\Users\%USERPROFILE%\AppData\Roaming\{app name}\logs\main.log
日志格式
默认:[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}]{scope} {text}
log.transports.file.format = '[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}]{scope} {text}';
日志大小
默认:1048576(1M)
达到最大上限后,备份文件并重命名为:main.old.log,有且仅有一个备份文件
log.transports.file.maxSize = 1048576;
日志等级:error, warn, info, verbose, debug, silly
日志文件等级
默认值:false
log.transports.file.level = 'false';
日志控制台等级
默认值:false
log.transports.console.level = 'false';
日志作用域
const userLog = log.scope('user');
userLog.info('用户范围的消息');
以上配置需要在electron完成初始化之前使用
完成以上配置以后,需要在electron初始化时,监听主进程的生命周期,并输出到本地
const { app } = require('electron')
const log = require('electron-log')
app.on('ready', async () => {
// 渲染进程崩溃
app.on('renderer-process-crashed', (event, webContents, killed) => {
log.error(
`APP-ERROR:renderer-process-crashed; event: ${JSON.stringify(event)}; webContents:${JSON.stringify(
webContents
)}; killed:${JSON.stringify(killed)}`
)
})
// GPU进程崩溃
app.on('gpu-process-crashed', (event, killed) => {
log.error(`APP-ERROR:gpu-process-crashed; event: ${JSON.stringify(event)}; killed: ${JSON.stringify(killed)}`)
})
// 渲染进程结束
app.on('render-process-gone', async (event, webContents, details) => {
log.error(
`APP-ERROR:render-process-gone; event: ${JSON.stringify(event)}; webContents:${JSON.stringify(
webContents
)}; details:${JSON.stringify(details)}`
)
})
// 子进程结束
app.on('child-process-gone', async (event, details) => {
log.error(`APP-ERROR:child-process-gone; event: ${JSON.stringify(event)}; details:${JSON.stringify(details)}`)
})
}
参考文献:(github.com/megahertz/e…)