【Bug已解决】openclaw log file too large / Disk space exhausted by logs — OpenClaw 日志文件过大解决方案
【Bug已解决】openclaw: "log file too large" / Disk space exhausted by logs — OpenClaw 日志文件过大解决方案
1. 问题描述
OpenClaw 的日志文件占用过多磁盘空间:
# 日志文件过大 $ ls -lh ~/.openclaw/logs/ -rw-r--r-- 1 user user 5.2G debug.log -rw-r--r-- 1 user user 3.8G session.log # 或磁盘空间不足 $ openclaw "task" Error: No space left on device Cannot write to ~/.openclaw/logs/debug.log # 或日志导致系统卡顿 $ openclaw "task" # 系统响应慢,因为日志文件太大 # 或日志轮转未配置 $ ls -lh ~/.openclaw/logs/ # 只有一个巨大的日志文件,没有轮转这个问题在以下场景中特别常见:
- 日志级别过高(debug)
- 日志轮转未配置
- 长时间运行
- 大量请求
- 日志未清理
- 磁盘空间不足
2. 原因分析
原因分类表
| 原因分类 | 具体表现 | 占比 |
|---|---|---|
| 日志级别高 | debug | 约 35% |
| 无轮转 | 单文件 | 约 25% |
| 长时间运行 | 累积 | 约 15% |
| 大量请求 | 频繁 | 约 15% |
| 未清理 | 历史日志 | 约 5% |
| 磁盘不足 | 小磁盘 | 约 5% |
3. 解决方案
方案一:清除日志文件(最推荐)
# 步骤 1:检查日志大小 du -sh ~/.openclaw/logs/ # 步骤 2:清除旧日志 rm ~/.openclaw/logs/*.log # 或只保留最近的 find ~/.openclaw/logs/ -name "*.log" -mtime +7 -delete # 步骤 3:或截断(不删除文件) truncate -s 0 ~/.openclaw/logs/debug.log # 步骤 4:验证 du -sh ~/.openclaw/logs/ openclaw "task"方案二:降低日志级别
# 步骤 1:检查当前日志级别 cat .openclaw/config.json | grep -i log # 步骤 2:降低级别 cat > .openclaw/config.json << 'EOF' { "model": "claude-sonnet-4-20250514", "logLevel": "warn" } EOF # 步骤 3:或环境变量 export OPENCLAW_LOG_LEVEL=warn # 步骤 4:验证 python3 -m json.tool .openclaw/config.json openclaw "task"方案三:配置日志轮转
# 步骤 1:使用 logrotate cat > /etc/logrotate.d/openclaw << 'EOF' ~/.openclaw/logs/*.log { daily rotate 7 compress missingok notifempty size 100M } EOF # 步骤 2:手动轮转 logrotate -f /etc/logrotate.d/openclaw # 步骤 3:或使用 cron echo "0 0 * * * find ~/.openclaw/logs/ -name '*.log' -mtime +7 -delete" | crontab # 步骤 4:验证 ls -lh ~/.openclaw/logs/方案四:禁用日志
# 步骤 1:禁用日志 export OPENCLAW_LOG_ENABLED=false # 步骤 2:或配置 cat > .openclaw/config.json << 'EOF' { "logLevel": "error", "logEnabled": false } EOF # 步骤 3:永久设置 echo 'export OPENCLAW_LOG_ENABLED=false' >> ~/.bashrc source ~/.bashrc # 步骤 4:验证 openclaw "task" ls -lh ~/.openclaw/logs/方案五:使用 --quiet
# 步骤 1:使用 --quiet 减少输出 openclaw --quiet "task" # 步骤 2:或 --silent openclaw --silent "task" # 步骤 3:CI/CD 中 openclaw --quiet --print "task" 2>&1 # 步骤 4:验证 openclaw --quiet --print "hello"方案六:移动日志到其他磁盘
# 步骤 1:创建日志目录 mkdir -p /external/logs/openclaw # 步骤 2:软链接 mv ~/.openclaw/logs /external/logs/openclaw/logs ln -s /external/logs/openclaw/logs ~/.openclaw/logs # 步骤 3:或配置日志路径 cat > .openclaw/config.json << 'EOF' { "logPath": "/external/logs/openclaw" } EOF # 步骤 4:验证 openclaw "task" ls -lh /external/logs/openclaw/4. 各方案对比总结
| 方案 | 适用场景 | 推荐指数 | 难度 |
|---|---|---|---|
| 方案一:清除 | 即时 | ⭐⭐⭐⭐⭐ | 低 |
| 方案二:降级别 | 长期 | ⭐⭐⭐⭐⭐ | 低 |
| 方案三:轮转 | 长期 | ⭐⭐⭐⭐⭐ | 中 |
| 方案四:禁用 | 极端 | ⭐⭐⭐ | 低 |
| 方案五:--quiet | 临时 | ⭐⭐⭐⭐ | 低 |
| 方案六:移动 | 磁盘 | ⭐⭐⭐ | 中 |
5. 常见问题 FAQ
5.1 日志文件在哪里
通常在~/.openclaw/logs/目录下。
5.2 如何检查日志大小
du -sh ~/.openclaw/logs/ ls -lh ~/.openclaw/logs/5.3 如何清除日志
rm ~/.openclaw/logs/*.log # 或 truncate -s 0 ~/.openclaw/logs/debug.log5.4 日志级别有哪些
error<warn<info<debug。使用warn或error减少日志量。
5.5 如何配置日志轮转
使用logrotate或cron定期清理旧日志。
5.6 如何禁用日志
export OPENCLAW_LOG_ENABLED=false5.7 --quiet 有什么用
减少控制台输出,但不影响日志文件。
5.8 日志导致磁盘满
清除日志 + 降低级别 + 配置轮转。
5.9 如何自动清理
echo "0 0 * * * find ~/.openclaw/logs/ -name '*.log' -mtime +7 -delete" | crontab5.10 排查清单速查表
□ 1. du -sh ~/.openclaw/logs/ 检查大小 □ 2. rm *.log 清除日志 □ 3. truncate -s 0 截断 □ 4. logLevel: warn 降低级别 □ 5. OPENCLAW_LOG_LEVEL=warn 环境变量 □ 6. logrotate 配置轮转 □ 7. cron 定期清理 □ 8. OPENCLAW_LOG_ENABLED=false 禁用 □ 9. --quiet 减少输出 □ 10. logPath 移动到其他磁盘6. 总结
- 根本原因:日志过大最常见原因是日志级别过高(35%)和日志轮转未配置(25%)
- 最佳实践:使用
rm ~/.openclaw/logs/*.log清除日志,降低级别到warn - 日志轮转:配置
logrotate或cron定期清理旧日志 - 降低级别:设置
"logLevel": "warn"减少日志量 - 最佳实践建议:使用
OPENCLAW_LOG_LEVEL=warn+logrotate+ 定期清理
故障排查流程图
flowchart TD A[日志文件过大] --> B[du -sh 检查大小] B --> C[清除日志] C --> D[rm *.log 或 truncate] D --> E[openclaw "task" 验证] E --> F{磁盘正常?} F -->|是| G[降低日志级别] F -->|否| H[清除更多文件] H --> C G --> I[logLevel: warn] I --> j[OPENCLAW_LOG_LEVEL=warn] j --> K[配置日志轮转] K --> L[logrotate 或 cron] L --> M[定期清理 7 天以上] M --> E E --> N{日志增长慢?} N -->|是| O[✅ 问题解决] N -->|否| P[禁用日志] P --> Q[OPENCLAW_LOG_ENABLED=false] Q --> R[或 logLevel: error] R --> E E --> S{成功?} S -->|是| O S -->|否| T[移动到其他磁盘] T --> U[logPath: /external/logs] U --> E O --> V[长期: warn + 轮转 + 清理] V --> W[✅ 长期方案]