logger.js.md 1.9 KB

文件职责

跨环境日志系统,提供统一的日志代理接口,支持在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:集合数据结构(用于检测循环引用)