浅谈electron-log日志记录

8,692 阅读1分钟

前言
我们在维护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…)