目录
-
- 摘要
- [1. 引言 - 为什么需要每日日志?](#1. 引言 - 为什么需要每日日志?)
-
- [1.1 每日日志的作用](#1.1 每日日志的作用)
- [1.2 每日日志 vs 长期记忆](#1.2 每日日志 vs 长期记忆)
- [1.3 日志系统架构](#1.3 日志系统架构)
- [2. 日志文件结构](#2. 日志文件结构)
-
- [2.1 标准日志模板](#2.1 标准日志模板)
- [2.2 日志内容分类](#2.2 日志内容分类)
- [2.3 日志写入时机](#2.3 日志写入时机)
- [3. 日志写入规范](#3. 日志写入规范)
-
- [3.1 写入原则](#3.1 写入原则)
- [3.2 任务状态标记](#3.2 任务状态标记)
- [3.3 时间戳使用](#3.3 时间戳使用)
- [4. 日志读取与查询](#4. 日志读取与查询)
-
- [4.1 读取当天日志](#4.1 读取当天日志)
- [4.2 读取历史日志](#4.2 读取历史日志)
- [4.3 语义搜索日志](#4.3 语义搜索日志)
- [4.4 日志查询场景](#4.4 日志查询场景)
- [5. 日志维护策略](#5. 日志维护策略)
-
- [5.1 自动归档流程](#5.1 自动归档流程)
- [5.2 归档目录结构](#5.2 归档目录结构)
- [5.3 日志清理规则](#5.3 日志清理规则)
- [6. 实战案例](#6. 实战案例)
-
- [6.1 案例一:任务跟踪](#6.1 案例一:任务跟踪)
- [6.2 案例二:问题追踪](#6.2 案例二:问题追踪)
- [6.3 案例三:决策追溯](#6.3 案例三:决策追溯)
- [7. 日志与其他系统的协作](#7. 日志与其他系统的协作)
- [8. 自动化日志管理](#8. 自动化日志管理)
-
- [8.1 自动创建日志](#8.1 自动创建日志)
- [8.2 自动归档脚本](#8.2 自动归档脚本)
- [8.3 日志摘要生成](#8.3 日志摘要生成)
- [9. 常见问题与解决](#9. 常见问题与解决)
- [10. 总结](#10. 总结)
-
- [10.1 核心要点](#10.1 核心要点)
- [10.2 最佳实践清单](#10.2 最佳实践清单)
- [10.3 下一步](#10.3 下一步)
- 参考资料
摘要
本文详细介绍 OpenClaw 的每日日志系统 memory/YYYY-MM-DD.md。从日志文件结构、写入时机、内容规范到自动化管理,全面解析如何通过每日日志实现 AI Agent 的短期记忆能力。通过实际案例演示日志的创建、更新、查询流程,帮助开发者构建具有时间连续性的智能应用,实现任务跟踪和上下文恢复。📅
1. 引言 - 为什么需要每日日志?
1.1 每日日志的作用
| 作用 | 说明 | 示例 |
|---|---|---|
| 任务跟踪 | 记录当天完成的任务 | 完成第41篇文章 |
| 上下文恢复 | 帮助 AI 恢复之前的工作状态 | 昨天写到哪了? |
| 问题记录 | 记录遇到的问题和解决方案 | 编译错误已修复 |
| 决策追溯 | 记录临时决策的原因 | 为什么选择这个方案 |
| 进度监控 | 追踪长期任务的进展 | 项目完成度 40% |
1.2 每日日志 vs 长期记忆
生命周期
记忆层次
提取重要信息
归档
定期清理
当天
7天内
超过7天
长期记忆
MEMORY.md
每日日志
YYYY-MM-DD.md
历史日志
删除
活跃使用
可检索
归档/删除
1.3 日志系统架构
memory/
├── 2026-04-13.md # 今天的日志
├── 2026-04-12.md # 昨天的日志
├── 2026-04-11.md # 前天的日志
├── ...
└── 2026-03-01.md # 更早的日志
2. 日志文件结构
2.1 标准日志模板
markdown
# 2026-04-13 工作记录
## 完成的任务
### 1. [任务名称]
- 具体内容
- 完成状态
- 相关链接
### 2. [任务名称]
- 具体内容
- 完成状态
## 进行中的任务
- 任务A:进度 60%
- 任务B:进度 30%
## 重要决策
- 决策内容
- 决策原因
## 遇到的问题
- 问题描述
- 解决方案
## 明日计划
- [ ] 待办事项1
- [ ] 待办事项2
## 备注
- 其他需要记录的信息
2.2 日志内容分类
| 分类 | 内容 | 示例 |
|---|---|---|
| 完成的任务 | 当天完成的工作 | 写完第41篇文章 |
| 进行中的任务 | 未完成的任务进度 | 文章写到一半 |
| 重要决策 | 临时决策及原因 | 选择方案A而非B |
| 遇到的问题 | 问题和解决方案 | 编译错误已修复 |
| 明日计划 | 下一步工作安排 | 继续写第42篇 |
| 备注 | 其他信息 | 用户心情不错 |
2.3 日志写入时机
任务完成
问题遇到
决策做出
会话结束
用户要求
事件发生
事件类型
写入完成任务
写入问题和解决方案
写入决策
写入会话摘要
写入指定内容
更新日志文件
3. 日志写入规范
3.1 写入原则
| 原则 | 说明 | 正确示例 | 错误示例 |
|---|---|---|---|
| 及时性 | 事件发生后立即记录 | 任务完成后马上写 | 第二天才记录 |
| 准确性 | 信息准确无误 | "完成第41篇文章" | "写了篇文章" |
| 简洁性 | 提取关键信息 | "修复编译错误:缺少依赖" | "遇到了一个编译错误,找了半天..." |
| 可追溯 | 包含必要上下文 | "选择方案A(性能更好)" | "选择方案A" |
3.2 任务状态标记
markdown
## 任务状态标记规范
✅ 已完成
🔄 进行中
⏳ 待开始
❌ 已取消
⚠️ 有问题
3.3 时间戳使用
markdown
## 带时间戳的日志
### 2026-04-13 09:00
- 开始撰写第41篇文章
### 2026-04-13 11:30
- 完成文章摘要和引言
### 2026-04-13 14:00
- 用户反馈:需要调整结构
- 已按要求修改
4. 日志读取与查询
4.1 读取当天日志
python
# AI 内部操作
read("memory/2026-04-13.md")
4.2 读取历史日志
python
# 读取昨天的日志
read("memory/2026-04-12.md")
# 读取最近7天的日志
for i in range(7):
date = today - timedelta(days=i)
read(f"memory/{date.strftime('%Y-%m-%d')}.md")
4.3 语义搜索日志
python
# 搜索特定内容
memory_search(
query="用户反馈",
maxResults=5
)
4.4 日志查询场景
| 场景 | 查询方式 |
|---|---|
| 今天做了什么 | 读取当天日志 |
| 昨天写到哪了 | 读取昨天日志 |
| 最近的任务进度 | 读取最近7天日志 |
| 某个问题的解决方案 | 语义搜索 |
| 某个决策的原因 | 语义搜索 |
5. 日志维护策略
5.1 自动归档流程
否
是
是
否
是
否
每日检查
日志超过7天?
保留
有重要内容?
提取到MEMORY.md
归档到archive/
超过30天?
删除
保留归档
5.2 归档目录结构
memory/
├── 2026-04-13.md # 最近7天
├── 2026-04-12.md
├── ...
├── archive/ # 归档目录
│ ├── 2026-03/
│ │ ├── 2026-03-01.md
│ │ ├── 2026-03-02.md
│ │ └── ...
│ └── 2026-02/
│ └── ...
5.3 日志清理规则
| 规则 | 时间 | 操作 |
|---|---|---|
| 活跃期 | 0-7天 | 保留原位置 |
| 归档期 | 7-30天 | 移动到archive/ |
| 清理期 | 超过30天 | 删除(重要内容已提取) |
6. 实战案例
6.1 案例一:任务跟踪
场景:用户正在撰写系列文章,需要跟踪进度
日志记录:
markdown
# 2026-04-13 工作记录
## 完成的任务
### 1. 撰写第41篇文章:记忆系统
- ✅ 完成摘要和引言
- ✅ 完成 MEMORY.md 章节
- ✅ 完成语义搜索章节
- ✅ 完成实战案例
- 📝 文章下载链接:https://...
## 进行中的任务
- 第42篇文章:日志记忆系统
- 进度:0%
- 预计明天开始
## 项目进度
- 总目标:100篇文章
- 已完成:41篇
- 完成率:41%
第二天恢复:
用户:昨天写到哪了?
AI:(读取 memory/2026-04-12.md)
昨天你完成了第41篇文章(记忆系统),
当前项目进度是41/100,完成率41%。
今天应该继续写第42篇:日志记忆系统。
6.2 案例二:问题追踪
场景:用户遇到问题,需要记录解决方案
日志记录:
markdown
# 2026-04-13 工作记录
## 遇到的问题
### 问题:Gateway 启动失败
- **现象**:`openclaw gateway start` 报错
- **原因**:端口 18800 被占用
- **解决方案**:
1. 检查端口占用:`lsof -i :18800`
2. 终止占用进程:`kill -9 <PID>`
3. 重新启动:`openclaw gateway start`
- **状态**:✅ 已解决
## 参考资料
- Gateway 文档:https://docs.openclaw.ai/gateway
后续查询:
用户:之前 Gateway 启动失败是怎么解决的?
AI:(搜索 memory/)
根据 2026-04-13 的日志,问题是端口 18800 被占用。
解决方案是:
1. 检查端口占用:lsof -i :18800
2. 终止占用进程:kill -9 <PID>
3. 重新启动:openclaw gateway start
6.3 案例三:决策追溯
场景:用户需要回顾之前的决策
日志记录:
markdown
# 2026-04-10 工作记录
## 重要决策
### 决策:文章采用 5 阶段结构
- **背景**:需要规划 100 篇技术文章
- **选项**:
- A:按主题分类(10个主题各10篇)
- B:按难度递进(5个阶段各20篇)
- C:按功能模块(20个模块各5篇)
- **选择**:方案 B
- **原因**:
1. 由浅入深更符合学习曲线
2. 读者可以按阶段学习
3. 便于后续扩展
- **时间**:2026-04-10 14:30
后续追溯:
用户:我们为什么选择 5 阶段结构?
AI:(搜索 memory/)
根据 2026-04-10 的决策记录,选择 5 阶段结构的原因是:
1. 由浅入深更符合学习曲线
2. 读者可以按阶段学习
3. 便于后续扩展
当时考虑了 3 个方案,最终选择了方案 B。
7. 日志与其他系统的协作
7.1 日志 + MEMORY.md
提取规则
提取重要信息
提供长期记忆
每日日志
MEMORY.md
用户偏好
重要决策
项目上下文
7.2 日志 + 语义搜索
python
# 搜索日志中的特定内容
results = memory_search(
query="Gateway 启动失败",
maxResults=3
)
# 结果可能来自多个日志文件
# memory/2026-04-13.md
# memory/2026-04-10.md
# memory/2026-04-05.md
7.3 日志 + Heartbeat
markdown
# HEARTBEAT.md
# 心跳检查时更新日志
## 检查项
- [ ] 更新今日日志
- [ ] 检查是否有遗漏的任务
- [ ] 记录当前进度
8. 自动化日志管理
8.1 自动创建日志
python
# 每日自动创建日志文件
import datetime
def create_daily_log():
today = datetime.date.today()
log_path = f"memory/{today.strftime('%Y-%m-%d')}.md"
template = f"""# {today.strftime('%Y-%m-%d')} 工作记录
## 完成的任务
(待记录)
## 进行中的任务
(待记录)
## 明日计划
(待记录)
"""
write(log_path, template)
8.2 自动归档脚本
bash
#!/bin/bash
# archive_old_logs.sh
# 将超过7天的日志移动到归档目录
find memory/ -name "*.md" -mtime +7 -exec mv {} memory/archive/ \;
# 删除超过30天的归档
find memory/archive/ -name "*.md" -mtime +30 -delete
8.3 日志摘要生成
python
# 从日志中提取摘要
def generate_summary(log_content):
"""从日志内容中提取关键信息"""
summary = {
"completed_tasks": extract_tasks(log_content, "完成的任务"),
"in_progress": extract_tasks(log_content, "进行中的任务"),
"decisions": extract_decisions(log_content),
"problems": extract_problems(log_content)
}
return summary
9. 常见问题与解决
Q1:日志文件太多怎么办?
解决方案:
- 启用自动归档
- 定期清理旧日志
- 只保留重要内容的摘要
Q2:如何避免日志内容重复?
解决方案:
- 使用时间戳区分
- 同类任务合并记录
- 定期整理和去重
Q3:日志内容太长怎么办?
解决方案:
- 只记录关键信息
- 使用链接引用详细内容
- 定期提取摘要到 MEMORY.md
Q4:如何保护日志中的敏感信息?
解决方案:
- 不记录敏感个人信息
- 使用占位符替代敏感数据
- 限制日志文件访问权限
10. 总结
10.1 核心要点
| 要点 | 说明 |
|---|---|
| 及时记录 | 事件发生后立即写入日志 |
| 结构清晰 | 使用标准模板组织内容 |
| 定期维护 | 归档旧日志,提取重要信息 |
| 语义检索 | 使用 memory_search 快速定位 |
10.2 最佳实践清单
- 每天创建新的日志文件
- 及时记录完成的任务
- 记录问题和解决方案
- 记录重要决策及原因
- 定期归档旧日志
- 提取重要信息到 MEMORY.md
10.3 下一步
- 第43篇:OpenClaw memory_search:语义搜索实战
- 第44篇:OpenClaw 记忆维护:自动整理与归档
- 第45篇:OpenClaw 上下文管理:Token 优化策略