# 文件职责 跨环境日志系统,提供统一的**日志代理接口**,支持在**Electron**、**浏览器**和**测试环境**下工作。 # 实现方式 通过**代理模式**包装原生 console 方法: - 使用高阶函数 proxyLog 创建日志代理 - 通过环境检测选择不同的日志传输方式 - 使用 safeStringify 防止循环引用导致的序列化错误 # 实现思路 1. **环境检测**:判断当前运行环境(Electron、Cypress测试、浏览器) 2. **日志代理**:拦截 console.log/warn/error 调用 3. **多通道输出**: - 始终输出到控制台(原生console) - Electron环境:通过IPC发送到主进程写入文件 - 测试环境:仅控制台输出,避免网络请求 - 浏览器环境:预留HTTP接口(当前被注释) 4. **安全序列化**:处理循环引用对象,避免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**:集合数据结构(用于检测循环引用)