尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【Electron】集成日志
GitHub path安装install npmpackage:npm install electron-log主进程electron-log/main/** * file 日志模块 - 统一管理 Electron 主进程日志 * description 负责日志目录初始化、文件滚动、级别控制、自动清理以及渲染进程日志捕获。 */import{app}fromelectron;importlogfromelectron-log;import*asfsfromnode:fs;import*aspathfromnode:path;import{storeUrl}from../utils/path;// 用户文档根目录ViefongChat Files/** * 初始化主进程日志系统 * * 执行流程按顺序 * 1. 提前初始化 IPC 通道确保渲染进程 Preload 能顺利调用日志方法不拦截 console避免干扰预加载逻辑 * 2. 在用户文档中创建专属日志目录ViefongChat Files/logs * 3. 配置日志格式、按本地时区生成每日文件名、单文件大小限制5MB 自动滚动 * 4. 根据运行环境开发/生产调整日志输出级别 * 5. 启动全局异常捕获未处理异常 Promise 拒绝 * 6. 自动清理超过 30 天的旧日志文件 */exportfunctioninitLogger(){// 1. 核心时序优先开启渲染进程 IPC 通道 // 必须在任何窗口创建之前执行否则渲染进程的 preload 脚本可能因找不到日志方法而报错。// 这里不拦截渲染进程的 console因为我们在 preload 中自行通过 IPC 转发日志避免重复。log.initialize({spyRendererConsole:false});// 2. 路径与目录准备 constlogDirpath.join(storeUrl,logs);// 确保日志目录存在若不存在则递归创建防止因权限问题导致后续写入失败if(!fs.existsSync(logDir)){fs.mkdirSync(logDir,{recursive:true});}// 3. 日志格式与文件名配置 // 时间戳精确到毫秒并包含日志级别便于事后按时间线还原现场log.transports.file.format[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}] {text};// 使用本地时区生成日志文件名避免 UTC 时差导致早上 0-8 点的日志误写入前一天文件constlocalDatenewDate();constyearlocalDate.getFullYear();constmonthString(localDate.getMonth()1).padStart(2,0);constdayString(localDate.getDate()).padStart(2,0);constcurrentFileNamemain-${year}-${month}-${day}.log;log.transports.file.fileNamecurrentFileName;// 强制将日志写入到自定义目录而非 Electron 默认的临时目录AppData 或 ~/Library/Logslog.transports.file.resolvePathFn()path.join(logDir,currentFileName);// 单文件达到 5MB 时自动滚动重命名旧文件创建新文件避免单个文件过大log.transports.file.maxSize5*1024*1024;// 4. 环境敏感的输出级别控制 if(app.isPackaged){// 生产环境仅记录 warn 及以上级别到文件控制台完全静默减少磁盘 I/O避免暴露内部信息log.transports.file.levelwarn;log.transports.console.levelfalse;}else{// 开发环境info 及以上写入文件debug 及以上打印到控制台便于实时调试log.transports.file.levelinfo;log.transports.console.leveldebug;}// 5. 全局异常捕获 // 捕获主进程中未被 try/catch 包裹的异常和未处理的 Promise 拒绝统一写入日志log.errorHandler.startCatching();log.info(Viefong 日志模块已成功绑定至自定义目录:${logDir});// 6. 启动时自动清理过期日志 // 删除 30 天前的 .log 文件避免用户磁盘被无限堆积try{cleanOldLogs(logDir,30);}catch(err){console.error(【自动清理】执行旧日志回收失败:,err);}}/** * 删除指定目录下超过保留天数的 .log 文件 * * param logDir 日志目录路径 * param maxDays 最大保留天数单位天例如 30 表示只保留最近 30 天的日志 */functioncleanOldLogs(logDir:string,maxDays:number){if(!fs.existsSync(logDir))return;constfilesfs.readdirSync(logDir);constnowDate.now();constexpirationTimemaxDays*24*60*60*1000;files.forEach((file){if(file.endsWith(.log)){constfilePathpath.join(logDir,file);conststatfs.statSync(filePath);if(now-stat.mtimeMsexpirationTime){fs.unlinkSync(filePath);console.log([Log GC] 已删除过期的日志文件:${file});}}});}// 导出已配置的 log 实例供其他模块主进程、子进程等直接使用exportdefaultlog;渲染进程: electron-log/rendererimportlogfromelectron-log/rendererlog.error|warn|info|verbose|debug|silly子进程importprintLogfromelectron-log/node// 需要配置setAppName若是不知道程序昵称则去package.json中看name是什么就对应写什么printLog.transports.file.setAppName(程序昵称);
RELATED

相关推荐

游戏武器评分系统开发指南:从数据库设计到算法优化

游戏武器评分系统开发指南:从数据库设计到算法优化

这次我们来看一个名为"那个武器应用6分的JCC校草"的项目,从标题看可能涉及游戏武器评分系统或角色评价机制。虽然具体技术细节在现有材料中不够明确,但我们可以基于常见的游戏评分系统和技术实现方案,探讨如何构建一个完整的武器评…

📅 2026/9/12 21:51:41
Ubuntu软件管理全指南:从APT到Snap安装与卸载

Ubuntu软件管理全指南:从APT到Snap安装与卸载

1. Ubuntu软件管理基础认知作为一个长期使用Ubuntu的开发者,我深刻体会到掌握软件安装与卸载技巧对提升工作效率的重要性。与Windows系统不同,Ubuntu采用独特的包管理机制,这套系统既强大又精密,需要我们从底层理解其运作原理。Ub…

📅 2026/7/21 8:46:53
计算机毕业设计之基于SpringBoot的英语单词学习系统设计与实现

计算机毕业设计之基于SpringBoot的英语单词学习系统设计与实现

在当今全球化日益加深的背景下,英语学习已成为提升个人竞争力的重要途径。为了满足广大英语学习者的需求,我们设计并实现了一款基于SpringBoot、Vue和MySQL技术的英语单词学习系统。该系统集用户友好的界面与丰富的功能于一体,旨在为用户提供…

📅 2026/9/10 9:50:41
MORE NEWS

更多资讯

📰

从629张小数据集到可部署模型:基于YOLOv8的停车位检测实战指南

简介:面向YOLO系列目标检测学习者的停车位检测数据集,包含629张带标注的实景图像,覆盖不同角度与场景下的车位区域,适合用于车位检测、智能停车等视觉任务的模型训练与效果验证。包内已按训练/验证需求完成数据集划分,…

📰

STM32智能小车核心板:从原理图到PCB布局与固件调试全攻略

简介:面向STM32F103C8T6智能小车开发者的一份核心板硬件工程设计资源。整套图纸用Altium Designer绘制,覆盖原理图、PCB图与元件库,不仅适用于智能小车,也可移植到其他STM32F103C8T6核心板场景,适合嵌入式入门者学习画…

📰

基于Java与MooseFS的分布式文件系统:核心原理与工程实践

简介:这是基于Java与Moosefs的分布式文件系统完整项目资料,面向高校学生与Java开发人员,可用于课程设计、毕业设计及分布式存储技术实战学习。压缩包共200个文件,以jar依赖库、java源码、class编译产物、html页面为主体&#xff0…

📰

YOLOv5+CRNN车牌识别实战:从检测、训练到TensorRT部署

简介:基于YOLOv5与CRNN的中文车牌识别系统,是一份面向计算机相关专业毕业设计、课程设计的高分项目源码包,适合软件工程、人工智能、自动化等方向学生及入门进阶学习者参考。资源已通过导师认可、答辩评审95分,代码全部测试运行成…

📰

PHP卡密验证系统设计:数据表、生成算法与后台管理实战

简介:这是一套基于PHP开发的卡密验证系统,面向需要为在线服务、游戏或软件产品搭建激活码/兑换码验证机制的个人开发者与中小企业。系统提供完整的前端交互与后台管理,覆盖卡密生成与状态管理、订单及支付回调处理、用户权限管理、销售统计等…

📰

Roo Code 连接 LLM Provider 完全指南:从 API Key 到首个 AI Agent 任务

Roo Code 连接 LLM Provider 完全指南:从 API Key 到首个 AI Agent 任务 【免费下载链接】Roo-Code Roo Code gives you a whole dev team of AI agents in your code editor. 项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-Code Roo Code 是一个运…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬