Logo Vincent
返回文章列表

Electron-开发实践:本地日志

Electron
Electron-开发实践:本地日志

【前言】

使用electron开发好本地应用后,

本地日志记录必不可少,

这样可以通过日志获取用户操作信息以及定位bug等,

本地日志与实时性的埋点上报稍微有不同,

本地日志量更大,信息更全,且不是所有信息都时候上报。

【与nodejs本地日志的异同】

electron写本地日志和nodejs写本地日志类似,

如果想自己封装,可以参考这篇文章: Node.js-WebServer开发实践:本地日志

不同点是

1. 初始化logger的时机

2. 渲染进程日志通过ipc传到主进程后记录到本地

【qiao-x-logger】

封装了一个npm包,欢迎使用: https://code.insistime.com/#/qiao-x-logger

初始化

建议在尽量早的时机初始化,这样可以记录更多的日志信息,

例如在electron入口js中第一行初始化,

// init
import { initLogger } from "qiao-x-logger";

// init logger
const loggerPath = path.resolve(app.getPath("logs"), "./electron.log");
initLogger(loggerPath);

主进程使用

主进程使用比较简单,如下

// logger
import { Logger } from "qiao-x-logger";
const logger = Logger("sips.js");

logger.info("iconutil", "success");

渲染进程使用

渲染进程使用需要通过ipc将日志传递到主进程后记录

1. 初始化主进程ipc监听

// log ipc
import { logIPCInit } from "qiao-x-logger";

logIPCInit();

2. preload相关代码

log-preload.js

// electron
import { ipcRenderer } from "electron";

/**
 * logIPC
 * @param {*} msg
 * @param {*} type debug,info,warn,error
 */
export const logIPC = (msg, type) => {
  ipcRenderer.send("ipc-log", { msg, type });
};

preload.js

// electron
import { contextBridge } from "electron";

// custom preload
import { logIPC } from "./log-preload.js";

// preload
contextBridge.exposeInMainWorld("electron", {
  logIPC,
});

3. 渲染进程使用

window.electron.logIPC(`selectPngPath filePath ${filePath}`, "info");

【效果】

写日志后会在logPath下生成日志文件,并按小时分割日志文件,

输出效果如下:

© 2026 vincentqiao.com . 保留所有权利。