文件职责
跨环境日志系统,提供统一的日志代理接口,支持在Electron、浏览器和测试环境下工作。
实现方式
通过代理模式包装原生 console 方法:
- 使用高阶函数 proxyLog 创建日志代理
- 通过环境检测选择不同的日志传输方式
- 使用 safeStringify 防止循环引用导致的序列化错误
实现思路
- 环境检测:判断当前运行环境(Electron、Cypress测试、浏览器)
- 日志代理:拦截 console.log/warn/error 调用
- 多通道输出:
- 始终输出到控制台(原生console)
- Electron环境:通过IPC发送到主进程写入文件
- 测试环境:仅控制台输出,避免网络请求
- 浏览器环境:预留HTTP接口(当前被注释)
- 安全序列化:处理循环引用对象,避免JSON.stringify崩溃
边界
输入边界
- 日志参数:任意类型的参数列表(通过...args接收)
- 环境变量:window对象、electron模块、Cypress对象
输出边界
- 控制台输出:所有环境都会输出
- IPC消息:Electron环境下发送到主进程
- HTTP请求:浏览器环境(预留,当前未启用)
职责边界
- ✅ 负责:日志收集、环境适配、安全序列化、IPC通信
- ❌ 不负责:日志文件写入(由主进程处理)、日志格式化、日志级别过滤
涉及概念
- Proxy Pattern:代理模式
- Higher-Order Function:高阶函数
- IPC (Inter-Process Communication):进程间通信
- Electron IPC Renderer:Electron渲染进程通信接口
- Circular Reference:循环引用
- JSON Serialization:JSON序列化
- Environment Detection:环境检测
- Cypress:端到端测试框架
- Console API:浏览器控制台API
- Spread Operator:展开运算符
- Set Data Structure:集合数据结构(用于检测循环引用)