# Gemini CLI 日志脱敏：保留错误结构和请求关联，移除测试手机号与令牌

Python logging.Filter实跑虚构结构化日志，声明敏感字段替换，request_id、0、false、null和普通数字ID保留。

## 环境

- Python 3；此题标准库脚本或README指定的外部CLI。

## 启动

~~~sh
cd reference
python3 verify.py
# 运行后查看原生结果阅读器（读取records.json）
python3 -m http.server 8787
# 打开 http://127.0.0.1:8787/report.html
~~~

## 七步操作

1. 准备虚构日志

输入只有原创JSON日志，手机号、example.invalid邮箱与EXERCISE_FAKE令牌均为假数据。不要把生产日志复制到练习或AI会话中才能开始。

2. 声明敏感字段

先声明phone、email和token为敏感字段，保留request_id、事件类型与耗时。规则针对字段语义，不能看到长数字就全部打码。

3. 递归结构处理

用Python logging.Filter解析结构，并递归处理字典与数组。字段命中后替换值，嵌套对象中的邮箱也必须被覆盖。

4. 保留请求关联

比较原日志与清洗副本，确认同一请求的request_id没有变化。这样仍能把错误与前后步骤关联，而不是得到一段无法排错的星号。

5. 检查零值空值

明确检查0、false、null保持原值，普通numeric_id也保留。真假值判断错误会把耗时0、失败false或空状态一起改坏。

6. 标出规则边界

未声明的自由文本不会自动变安全，本题不会声称识别所有个人信息。需要分享自由文本时先补充字段或专用规则并单独验收。

7. 输出可分享副本

运行verify.py生成本地对照，原始假数据和清洗结果都可下载。Gemini CLI账号会话未运行；这篇验证日志预处理，不是Git仓库密钥扫描。

## 目录身份

- starter：待完成的任务接口与原创输入，TODO不是已完成实现。
- reference：作者原生完成参考和实际产物。records.json/browser-result.json为本地实测记录，不是AI助手回复。
- TASK.md：可交给相应AI助手的原始任务合同。该助手账号生成会话未运行。

## 依赖与许可

原创教学代码以MIT许可提供。第三方项目、模型及浏览器遵循其自身许可。第三方依赖由本地安装获取，不包含node_modules、模型权重、WASM运行时、数据库、缓存或凭据。

## 官方依据

- https://docs.python.org/3/library/logging.html#filter-objects
