---
name: logging
description: |
  实作结构化日誌，包含正确的日誌层级和敏感数据处理。
  使用时机：新增日誌、除錯、设置可觀测性。
  关鍵字：logging, log level, structured logging, observability, 日誌, 记录, 结构化日誌。
source: ../../../../skills/logging-guide/SKILL.md
source_version: 1.0.0
translation_version: 1.0.0
last_synced: 2026-01-08
status: current
---

# 日誌指南

> **语言**: [English](../../../../skills/logging-guide/SKILL.md) | 简体中文

**版本**: 1.0.0
**最後更新**: 2025-12-30
**適用範圍**: Claude Code Skills

---

## 目的

此技能幫助在所有環境中实作一致、结构化且可操作的应用程序日誌。

## 快速參考

### 日誌层级

| 层级 | 代码 | 使用时机 | 生产環境 |
|------|------|----------|----------|
| **TRACE** | 10 | 非常详细的除錯信息 | 关閉 |
| **DEBUG** | 20 | 详细的除錯信息 | 关閉 |
| **INFO** | 30 | 正常操作事件 | 開啟 |
| **WARN** | 40 | 潛在問題，可恢復 | 開啟 |
| **ERROR** | 50 | 需要注意的错误 | 開啟 |
| **FATAL** | 60 | 嚴重故障 | 開啟 |

### 层级选择决策樹

```
只用於除錯？               → DEBUG（生产環境关閉）
正常操作完成？             → INFO
意外但没問題的情况？       → WARN
操作失败？                 → ERROR
应用程序無法繼續？         → FATAL
```

### 各层级使用时机

| 层级 | 範例 |
|------|------|
| **TRACE** | 函式进入/離開、回圈迭代、变數值 |
| **DEBUG** | 状态变更、设置值、查詢參數 |
| **INFO** | 应用啟动/关閉、使用者操作、排程任务 |
| **WARN** | 已棄用 API、重試嘗試、資源接近上限 |
| **ERROR** | 失败的操作、捕獲的例外、集成失败 |
| **FATAL** | 無法恢復的错误、啟动失败、失去关鍵資源 |

## 结构化日誌

### 必要欄位

```json
{
  "timestamp": "2025-01-15T10:30:00.123Z",
  "level": "INFO",
  "message": "使用者登入成功",
  "service": "auth-service",
  "environment": "production"
}
```

### 建议欄位

```json
{
  "timestamp": "2025-01-15T10:30:00.123Z",
  "level": "INFO",
  "message": "使用者登入成功",
  "service": "auth-service",
  "environment": "production",
  "trace_id": "abc123",
  "span_id": "def456",
  "user_id": "usr_12345",
  "request_id": "req_67890",
  "duration_ms": 150,
  "http_method": "POST",
  "http_path": "/api/v1/login",
  "http_status": 200
}
```

### 欄位命名慣例

使用 `snake_case` 并加上領域前綴：

| 領域 | 常用欄位 |
|------|----------|
| HTTP | http_method, http_path, http_status, http_duration_ms |
| 数据庫 | db_query_type, db_table, db_duration_ms, db_rows_affected |
| 佇列 | queue_name, queue_message_id, queue_delay_ms |
| 使用者 | user_id, user_role, user_action |
| 请求 | request_id, trace_id, span_id |

## 详细指南

完整标准請參考：
- [日誌标准](../../../../core/logging-standards.md)

### AI 優化格式（节省 Token）

AI 助手可使用 YAML 格式文件以減少 Token 使用量：
- 基礎标准：`ai/standards/logging.ai.yaml`

## 敏感数据处理

### 絕对不要记录

- 密码或机密
- API 金鑰或 Token
- 信用卡号码
- 身分证字号
- 完整的认证 Token

### 遮罩或编修

```javascript
// 不好
logger.info('登入嘗試', { password: userPassword });

// 好
logger.info('登入嘗試', { password: '***已编修***' });

// 好 - 部分遮罩
logger.info('卡片已处理', { last_four: '4242' });
```

### PII 处理

- 盡可能记录使用者 ID 而非電子郵件
- 对敏感查詢使用雜湊識别码
- 设置数据保留政策

## 错误日誌

### 必要的错误欄位

```json
{
  "level": "ERROR",
  "message": "数据庫連线失败",
  "error_type": "ConnectionError",
  "error_message": "連线被拒絕",
  "error_code": "ECONNREFUSED",
  "stack": "Error: Connection refused\n    at connect (/app/db.js:45:11)..."
}
```

### 错误上下文

务必包含：
- 嘗試的操作是什麼
- 相关識别码（user_id, request_id）
- 输入參數（已清理）
- 重試次數（如適用）

```javascript
logger.error('处理订单失败', {
  error_type: err.name,
  error_message: err.message,
  order_id: orderId,
  user_id: userId,
  retry_count: 2,
  stack: err.stack
});
```

## 日誌格式

### JSON 格式（生产環境）

```json
{"timestamp":"2025-01-15T10:30:00.123Z","level":"INFO","message":"请求完成","request_id":"req_123","duration_ms":45}
```

### 人类可读格式（开发環境）

```
2025-01-15T10:30:00.123Z [INFO] 请求完成 request_id=req_123 duration_ms=45
```

## 效能考量

### 各環境的日誌量

| 環境 | 层级 | 策略 |
|------|------|------|
| 开发 | DEBUG | 所有日誌 |
| 测试 | INFO | 大部分日誌 |
| 生产 | INFO | 高流量端点採样 |

### 高流量端点

- 使用採样（每 100 筆记录 1 筆）
- 聚合指標而非个别日誌
- 使用獨立的日誌串流

## 检查清单

### 必要欄位

- [ ] timestamp（ISO 8601）
- [ ] level
- [ ] message
- [ ] service name
- [ ] request_id 或 trace_id

### 安全性

- [ ] 没有密码或机密
- [ ] 没有完整 Token
- [ ] PII 已遮罩或雜湊
- [ ] 信用卡從不记录
- [ ] 保留政策已设置

---

## 设置偵测

此技能支援项目特定设置。

### 偵测順序

1. 检查現有的日誌程序庫设置
2. 检查 `CONTRIBUTING.md` 中的日誌指南
3. 若無找到，**预设使用结构化 JSON 日誌**

### 首次设置

若未找到日誌标准：

1. 建议：「此项目尚未设置日誌标准。您要设置结构化日誌嗎？」
2. 建议在 `CONTRIBUTING.md` 中记录：

```markdown
## 日誌标准

### 日誌层级
- DEBUG: 僅开发環境，详细診斷信息
- INFO: 正常操作（啟动、使用者操作、任务）
- WARN: 意外但可恢復的情况
- ERROR: 需要調查的失败

### 必要欄位
所有日誌必須包含：timestamp, level, message, service, request_id

### 敏感数据
絕不记录：密码、Token、信用卡、身分证字号
```

---

## 相关标准

- [日誌标准](../../../../core/logging-standards.md)
- [错误码标准](../../../../core/error-code-standards.md)

---

## 版本历史

| 版本 | 日期 | 变更 |
|------|------|------|
| 1.0.0 | 2025-12-30 | 初始發布 |

---

## 授权

此技能採用 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) 授权。

**來源**: [universal-dev-standards](https://github.com/AsiaOstrich/universal-dev-standards)


## Next Steps Guidance | 下一步引導

After `/logging` completes, the AI assistant should suggest:

> **日誌標準已掌握。建議下一步 / Logging standards understood. Suggested next steps:**
> - 根據日誌指南在程式碼中實作結構化日誌 ⭐ **Recommended / 推薦** — 立即將日誌標準應用到專案 / Apply logging standards to the project immediately
> - 執行 `/errors` 設計錯誤碼以配合日誌系統 — 讓錯誤追蹤更有效率 / Make error tracking more efficient
> - 執行 `/sdd` 將可觀測性需求納入規格 — 確保日誌需求在規格中有定義 / Ensure logging requirements are defined in specs

---

## Related Standards

- [Logging Standards](../../core/logging-standards.md)
- [Error Code Standards](../../core/error-code-standards.md)

---

## Version History

| Version | Date | Changes |
|---------|------|---------|
| 1.0.0 | 2025-12-30 | Initial release |

---

## License

This skill is released under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).

**Source**: [universal-dev-standards](https://github.com/AsiaOstrich/universal-dev-standards)
