Files
dify_market_manager_gui/CACHE_CLEAR_FIX.md

3.5 KiB
Raw Permalink Blame History

缓存清理功能修复说明

问题描述

重启电脑时,清除缓存没有生效,并且日志文件中也没有看到对应的日志。

问题原因分析

  1. 异步操作处理不当clearStorageData 是异步操作,但在事件处理中没有正确等待完成
  2. 日志配置问题:日志可能没有及时写入文件,导致系统关机时日志丢失
  3. 事件处理顺序问题event.resume() 在缓存清理完成前就被调用
  4. 缺少重启事件监听:只监听了 shutdown 事件,没有监听 restart 事件

修复内容

1. 创建统一的缓存清理工具 (src/main/utils/cacheUtils.js)

  • 提供 clearAllSessionData() 函数,统一处理会话数据清理
  • 提供 clearAllWindowsCache() 函数,清理所有窗口的缓存
  • 包含详细的错误处理和日志记录
  • 确保日志及时写入文件

2. 改进日志配置 (src/main/utils/logger.js)

  • 设置 log.transports.file.sync = true 确保日志立即写入
  • 添加日志文件路径获取功能
  • 在应用启动时显示日志文件路径

3. 修复主进程事件处理 (src/main/index.js)

  • 修复 powerMonitor.on('shutdown') 事件处理,使用 async/await 正确等待缓存清理
  • 添加 powerMonitor.on('restart') 事件监听,处理系统重启
  • 修复所有 clearStorageData 调用,使用统一的工具函数
  • 添加进程信号监听 (SIGTERM, SIGINT) 确保强制关闭时也能清理缓存
  • 添加未捕获异常处理

4. 改进托盘功能 (src/main/tray.js)

  • 使用统一的缓存清理函数
  • 添加"查看日志"菜单项,方便用户查看日志文件

5. 添加测试脚本 (test-cache-clear.js)

  • 提供缓存清理功能的测试代码

修复后的功能特点

缓存清理覆盖的场景

  1. 系统关机 (powerMonitor.on('shutdown'))
  2. 系统重启 (powerMonitor.on('restart'))
  3. 应用正常退出 (app.on('before-quit'))
  4. 窗口关闭 (app.on('window-all-closed'))
  5. 应用退出 (app.on('will-quit'))
  6. 进程信号 (SIGTERM, SIGINT)
  7. 托盘手动清理

日志记录改进

  • 每个清理操作都有详细的日志记录
  • 包含操作上下文信息(如 'shutdown', 'restart' 等)
  • 日志立即写入文件,避免丢失
  • 提供日志文件路径查看功能

错误处理

  • 完善的错误捕获和日志记录
  • 即使清理失败也不会阻止应用正常退出
  • 详细的错误信息记录

使用方法

查看日志

  1. 右键点击托盘图标
  2. 选择"查看日志"
  3. 系统会自动打开日志文件所在目录

手动清理缓存

  1. 右键点击托盘图标
  2. 选择"清除缓存"
  3. 系统会清理所有缓存并重新加载窗口

测试缓存清理

node test-cache-clear.js

日志文件位置

  • Windows: %APPDATA%\[应用名称]\logs\main.log
  • macOS: ~/Library/Logs/[应用名称]/main.log
  • Linux: ~/.config/[应用名称]/logs/main.log

验证修复效果

  1. 重启电脑
  2. 查看日志文件,应该能看到类似以下内容:
    [时间] 系统将要重启.
    [时间] [restart] 开始清除所有会话数据
    [时间] [restart] 会话数据清除成功
    [时间] [restart] 缓存清理完成
    

注意事项

  • 修复后的代码确保了缓存清理的可靠性
  • 日志记录更加详细,便于问题排查
  • 即使系统强制关闭应用,也会尝试清理缓存
  • 所有清理操作都是异步的,不会阻塞系统关机/重启流程