实作结构化日誌,包含正确的日誌层级和敏感数据处理。 使用时机:新增日誌、除錯、设置可觀测性。 关鍵字:logging, log level, structured logging, observability, 日誌, 记录, 结构化日誌。
Scanned 2/12/2026
Install to Claude Code
npx -y skills add AsiaOstrich/universal-dev-standards --skill logging-guide --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Logging Guide?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/asiaostrich-logging-guide)More formats (shields.io, HTML) on the badges page.
---
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)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!