如何快速掌握 Electron-log 5.4.3Electron 应用的完整日志解决方案指南【免费下载链接】electron-logSimple logging module Electron/Node.js/NW.js application. No dependencies. No complicated configuration.项目地址: https://gitcode.com/gh_mirrors/el/electron-logElectron-log 是一个专为 Electron、Node.js 和 NW.js 应用设计的简单日志模块最新版本为 5.4.3。它提供了零依赖、无需复杂配置的日志记录功能帮助开发者轻松追踪应用运行状态和调试问题。本文将详细介绍如何在你的项目中高效使用 electron-log涵盖从基础安装到高级配置的各个方面。快速安装与基础使用安装方法要在 Electron 项目中使用 electron-log 5.4.3只需通过 npm 或 yarn 安装npm install electron-log5.4.3或使用 yarnyarn add electron-log5.4.3版本兼容性说明从 v5 版本开始electron-log 要求 Electron 13 或 Node.js 14 运行时环境。如果你的项目使用较旧的运行时可以考虑使用 electron-log v4 版本它支持 Node.js 0.10 和几乎所有的 Electron 构建版本。基础使用示例在主进程中使用日志功能非常简单// main.js const log require(electron-log/main); // 初始化日志器使其在渲染进程中可用 log.initialize(); // 记录不同级别的日志 log.info(应用启动成功); log.warn(检测到潜在的性能问题); log.error(文件读取失败, error); log.debug(调试信息用户操作记录);在渲染进程中使用时如果使用了打包工具// renderer.js import log from electron-log/renderer; log.info(页面加载完成); log.verbose(组件渲染详情);如果没有使用打包工具可以通过全局变量__electronLog访问日志函数// renderer.js __electronLog.info(通过全局变量记录日志);核心功能与配置详解多平台日志存储electron-log 默认会根据操作系统自动选择日志文件存储位置Linux:~/.config/{app name}/logs/main.logmacOS:~/Library/Logs/{app name}/main.logWindows:%USERPROFILE%\AppData\Roaming\{app name}\logs\main.log日志级别系统electron-log 支持六级日志级别从最高优先级到最低优先级依次为error- 错误信息warn- 警告信息info- 常规信息verbose- 详细信息debug- 调试信息silly- 最详细的信息灵活的传输器配置electron-log 提供了多种日志传输方式你可以根据需求灵活配置控制台输出配置// 配置控制台传输器 log.transports.console.level info; // 只输出 info 及以上级别的日志 log.transports.console.format {h}:{i}:{s} {level} {text}; // 自定义格式 log.transports.console.useStyles true; // 启用样式文件日志配置// 配置文件传输器 log.transports.file.level silly; // 记录所有级别的日志 log.transports.file.maxSize 10485760; // 设置最大文件大小为 10MB log.transports.file.fileName myapp.log; // 自定义日志文件名 log.transports.file.format {y}-{m}-{d} {h}:{i}:{s}.{ms} [{level}] {text}; // 详细的时间格式远程日志传输// 配置远程传输器 log.transports.remote.level error; // 只发送错误日志到远程服务器 log.transports.remote.url https://your-log-server.com/api/logs; log.transports.remote.headers { Authorization: Bearer your-token, Content-Type: application/json };自定义日志格式你可以使用模板字符串或函数来自定义日志格式// 使用模板字符串 log.transports.console.format {level} [{date}] {text}; // 使用格式化函数 log.transports.console.format (params) { const { level, date, data } params; return [[${date.toISOString()}] ${level.toUpperCase()}:, ...data]; };高级功能与最佳实践日志作用域管理electron-log 支持作用域功能帮助你在复杂应用中组织日志// 创建作用域 const dbLogger log.scope(database); const apiLogger log.scope(api); // 使用作用域记录日志 dbLogger.info(数据库连接成功); apiLogger.warn(API 响应超时); // 临时作用域 log.scope(auth).info(用户认证成功);错误处理集成electron-log 提供了强大的错误处理功能可以自动捕获未处理的异常// 启用错误处理器 log.errorHandler.startCatching(); // 手动记录错误 try { // 可能出错的代码 riskyOperation(); } catch (error) { log.error(操作失败, error); // 错误会自动记录到文件和控制台 } // 自定义错误处理 log.errorHandler.onError (error) { log.error(自定义错误处理:, error); // 可以在这里添加额外的错误处理逻辑 };钩子函数与转换器electron-log 允许你通过钩子和转换器来拦截和修改日志消息// 添加钩子函数 log.hooks.push((message, transport) { // 过滤敏感信息 if (message.data.some(item typeof item string item.includes(password))) { return false; // 阻止记录此消息 } // 添加额外信息 message.data.push([来自钩子]); return message; }); // 添加转换器 log.transports.console.transforms.push(({ data, message, transport }) { // 转换日志数据 return data.map(item { if (typeof item object) { return JSON.stringify(item, null, 2); } return item; }); });渲染进程日志集成策略初始化方法选择根据你的项目架构electron-log 提供了多种渲染进程初始化方式方法一使用自动注入推荐// main.js import log from electron-log/main; log.initialize(); // renderer.js import log from electron-log/renderer; log.info(渲染进程日志);方法二手动注入预加载脚本// preload.js import electron-log/preload; // renderer.js window.__electronLog.info(通过预加载脚本记录日志);方法三监听 console 调用// main.js import log from electron-log/main; log.initialize({ spyRendererConsole: true }); // 现在渲染进程中的 console.log 调用也会被记录处理自定义会话如果你使用了自定义的 Electron 会话需要确保正确初始化// main.js import { session } from electron; import log from electron-log/main; const customSession session.fromPartition(persist:custom); log.initialize({ getSessions: () [customSession] });性能优化与调试技巧日志级别动态调整在生产环境中你可能需要根据情况动态调整日志级别// 根据环境变量调整日志级别 if (process.env.NODE_ENV production) { log.transports.console.level warn; log.transports.file.level info; } else { log.transports.console.level silly; log.transports.file.level debug; } // 运行时动态调整 log.transports.console.level process.env.DEBUG ? debug : info;批量日志处理对于高频日志场景可以使用批量处理来提升性能// 批量记录日志 const batchLogs []; for (let i 0; i 1000; i) { batchLogs.push({ level: info, data: [操作 ${i}] }); } // 批量处理需要自定义实现 batchLogs.forEach(logEntry { loglogEntry.level; });日志轮转与清理electron-log 内置了基本的日志轮转功能但你也可以实现自定义的清理策略// 自定义日志清理 const fs require(fs); const path require(path); function cleanupOldLogs(logDir, maxAgeDays 30) { const now Date.now(); const maxAge maxAgeDays * 24 * 60 * 60 * 1000; fs.readdir(logDir, (err, files) { if (err) return; files.forEach(file { const filePath path.join(logDir, file); fs.stat(filePath, (err, stats) { if (err) return; if (now - stats.mtimeMs maxAge) { fs.unlink(filePath, (err) { if (!err) log.info(清理旧日志文件: ${file}); }); } }); }); }); }常见问题与解决方案问题1日志文件权限问题// 检查并设置正确的日志目录权限 const app require(electron).app; const log require(electron-log/main); // 确保日志目录存在且有写入权限 const logDir log.transports.file.getFile().path; const dir path.dirname(logDir); if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } // 设置适当的权限Linux/macOS if (process.platform ! win32) { fs.chmodSync(dir, 755); }问题2渲染进程日志丢失如果渲染进程日志没有出现在主进程日志中检查以下配置// main.js - 确保正确初始化 import log from electron-log/main; // 确保在创建窗口前调用 initialize log.initialize(); // 检查上下文隔离设置 const mainWindow new BrowserWindow({ webPreferences: { contextIsolation: true, // 应为 true nodeIntegration: false, // 应为 false preload: path.join(__dirname, preload.js) } });问题3日志格式不一致确保所有进程使用相同的日志格式配置// 在主进程中统一配置格式 const log require(electron-log/main); // 设置全局格式 log.transports.console.format {h}:{i}:{s} [{level}] {text}; log.transports.file.format {y}-{m}-{d} {h}:{i}:{s}.{ms} [{level}] {text}; // 初始化以应用到渲染进程 log.initialize();集成与扩展与监控系统集成将 electron-log 与 APM应用性能监控系统集成// 集成 Sentry 等错误监控系统 const Sentry require(sentry/electron); log.hooks.push((message) { if (message.level error) { // 将错误发送到 Sentry Sentry.captureException(message.data[0]); } return message; });自定义传输器开发你可以开发自己的传输器来满足特定需求// 自定义数据库传输器 const dbTransport (message) { // 将日志存储到数据库 const { level, date, data, scope } message; db.insert(logs, { level, timestamp: date, message: data.join( ), scope: scope || default, createdAt: new Date() }); }; dbTransport.level info; dbTransport.transforms []; // 添加到日志传输器 log.transports.database dbTransport;总结Electron-log 5.4.3 为 Electron 应用提供了一个强大而灵活的日志解决方案。通过本文的介绍你应该能够快速安装和配置 electron-log理解和使用不同的日志级别和传输器在复杂应用中有效管理日志作用域集成渲染进程日志记录优化日志性能和处理常见问题electron-log 的简洁设计和强大功能使其成为 Electron 开发者的理想选择。通过合理配置和使用它可以显著提升应用的调试效率和运维能力。更多详细信息和高级用法请参考项目中的完整文档docs/ 和示例代码e2e/。【免费下载链接】electron-logSimple logging module Electron/Node.js/NW.js application. No dependencies. No complicated configuration.项目地址: https://gitcode.com/gh_mirrors/el/electron-log创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考