384 lines
9.5 KiB
Markdown
384 lines
9.5 KiB
Markdown
|
|
# 🚀 西部数据日志系统使用指南
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
西部数据服务现在集成了完整的日志记录系统,支持请求、响应、错误和性能四种类型的日志记录,每种类型都有独立的日志文件。
|
|||
|
|
|
|||
|
|
## 📝 日志记录范围
|
|||
|
|
|
|||
|
|
### ✅ **会记录日志的操作**
|
|||
|
|
- `CallAPI()` - 调用西部数据API
|
|||
|
|
- `G05HZ01CallAPI()` - 调用G05HZ01 API
|
|||
|
|
|
|||
|
|
### ❌ **不会记录日志的操作**
|
|||
|
|
- `Encrypt()` - 内部加密方法
|
|||
|
|
- `Md5Encrypt()` - 内部MD5加密方法
|
|||
|
|
|
|||
|
|
**说明**: 加密解密是内部工具方法,调用频率高且不涉及外部API,因此不记录日志以提高性能。日志系统专注于记录外部API调用的完整生命周期。
|
|||
|
|
|
|||
|
|
## ✨ 核心特性
|
|||
|
|
|
|||
|
|
### 1. **四种日志类型**
|
|||
|
|
- **请求日志**: 记录所有API请求的详细信息
|
|||
|
|
- **响应日志**: 记录所有API响应的详细信息
|
|||
|
|
- **错误日志**: 记录所有错误和异常情况
|
|||
|
|
- **性能日志**: 记录请求耗时和性能指标
|
|||
|
|
|
|||
|
|
### 2. **日志文件分离**
|
|||
|
|
```
|
|||
|
|
logs/
|
|||
|
|
├── westdex/
|
|||
|
|
│ ├── 2024-01-01/
|
|||
|
|
│ │ ├── request.log # 请求日志
|
|||
|
|
│ │ ├── response.log # 响应日志
|
|||
|
|
│ │ ├── error.log # 错误日志
|
|||
|
|
│ │ └── performance.log # 性能日志
|
|||
|
|
│ └── 2024-01-02/
|
|||
|
|
│ ├── request.log
|
|||
|
|
│ ├── response.log
|
|||
|
|
│ ├── error.log
|
|||
|
|
│ └── performance.log
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. **请求追踪**
|
|||
|
|
- 每个请求都有唯一的请求ID
|
|||
|
|
- 请求和响应日志通过请求ID关联
|
|||
|
|
- 支持完整的请求链路追踪
|
|||
|
|
|
|||
|
|
### 4. **性能监控**
|
|||
|
|
- 记录每个API调用的耗时
|
|||
|
|
- 区分成功和失败的请求
|
|||
|
|
- 提供性能分析数据
|
|||
|
|
|
|||
|
|
## 🏗️ 配置说明
|
|||
|
|
|
|||
|
|
### 配置文件设置
|
|||
|
|
|
|||
|
|
在 `config.yaml` 中添加西部数据日志配置:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
westdex:
|
|||
|
|
url: "https://apimaster.westdex.com.cn/api/invoke"
|
|||
|
|
key: "your-key"
|
|||
|
|
secret_id: "your-secret-id"
|
|||
|
|
secret_second_id: "your-secret-second-id"
|
|||
|
|
|
|||
|
|
# 西部数据日志配置
|
|||
|
|
logging:
|
|||
|
|
enabled: true # 启用日志记录
|
|||
|
|
log_dir: "logs/westdex" # 日志目录
|
|||
|
|
use_daily: true # 按日分包
|
|||
|
|
enable_level_separation: true # 启用级别分离
|
|||
|
|
|
|||
|
|
# 各级别配置
|
|||
|
|
level_configs:
|
|||
|
|
request:
|
|||
|
|
max_size: 100 # 100MB
|
|||
|
|
max_backups: 5 # 5个备份
|
|||
|
|
max_age: 30 # 30天
|
|||
|
|
compress: true # 启用压缩
|
|||
|
|
response:
|
|||
|
|
max_size: 100
|
|||
|
|
max_backups: 5
|
|||
|
|
max_age: 30
|
|||
|
|
compress: true
|
|||
|
|
error:
|
|||
|
|
max_size: 200 # 错误日志文件更大
|
|||
|
|
max_backups: 10 # 更多备份
|
|||
|
|
max_age: 90 # 保留更久
|
|||
|
|
compress: true
|
|||
|
|
performance:
|
|||
|
|
max_size: 100
|
|||
|
|
max_backups: 5
|
|||
|
|
max_age: 30
|
|||
|
|
compress: true
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚀 使用方法
|
|||
|
|
|
|||
|
|
### 1. 使用配置创建服务
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
package main
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"tyapi-server/internal/config"
|
|||
|
|
"tyapi-server/internal/infrastructure/external/westdex"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
func main() {
|
|||
|
|
// 加载配置
|
|||
|
|
cfg := &config.Config{
|
|||
|
|
// ... 配置内容
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 使用配置创建西部数据服务
|
|||
|
|
service, err := westdex.NewWestDexServiceWithConfig(cfg)
|
|||
|
|
if err != nil {
|
|||
|
|
panic(err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 使用服务
|
|||
|
|
resp, err := service.CallAPI("G05HZ01", map[string]interface{}{
|
|||
|
|
"param1": "value1",
|
|||
|
|
"param2": "value2",
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
if err != nil {
|
|||
|
|
// 错误会自动记录到错误日志
|
|||
|
|
log.Printf("API调用失败: %v", err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 成功响应会自动记录到响应日志
|
|||
|
|
log.Printf("API调用成功: %s", string(resp))
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 使用自定义日志配置
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
// 创建自定义日志配置
|
|||
|
|
loggingConfig := westdex.WestDexLoggingConfig{
|
|||
|
|
Enabled: true,
|
|||
|
|
LogDir: "logs/custom_westdex",
|
|||
|
|
UseDaily: true,
|
|||
|
|
EnableLevelSeparation: true,
|
|||
|
|
LevelConfigs: map[string]westdex.WestDexLevelFileConfig{
|
|||
|
|
"request": {
|
|||
|
|
MaxSize: 50,
|
|||
|
|
MaxBackups: 3,
|
|||
|
|
MaxAge: 7,
|
|||
|
|
Compress: true,
|
|||
|
|
},
|
|||
|
|
"error": {
|
|||
|
|
MaxSize: 100,
|
|||
|
|
MaxBackups: 5,
|
|||
|
|
MaxAge: 30,
|
|||
|
|
Compress: true,
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 使用自定义配置创建服务
|
|||
|
|
service, err := westdex.NewWestDexServiceWithLogging(
|
|||
|
|
"https://api.example.com",
|
|||
|
|
"your-key",
|
|||
|
|
"your-secret-id",
|
|||
|
|
"your-secret-second-id",
|
|||
|
|
loggingConfig,
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📊 日志示例
|
|||
|
|
|
|||
|
|
### 请求日志示例
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"level": "info",
|
|||
|
|
"msg": "西部数据API请求",
|
|||
|
|
"request_id": "westdex_a1b2c3d4",
|
|||
|
|
"api_code": "G05HZ01",
|
|||
|
|
"url": "https://apimaster.westdex.com.cn/api/invoke/449159/G05HZ01?timestamp=1704096000000",
|
|||
|
|
"request_data": {
|
|||
|
|
"param1": "value1",
|
|||
|
|
"param2": "value2"
|
|||
|
|
},
|
|||
|
|
"timestamp": "2024-01-01T12:00:00Z"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 响应日志示例
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"level": "info",
|
|||
|
|
"msg": "西部数据API响应",
|
|||
|
|
"request_id": "westdex_a1b2c3d4",
|
|||
|
|
"api_code": "G05HZ01",
|
|||
|
|
"status_code": 200,
|
|||
|
|
"response_data": "{\"code\":\"0000\",\"data\":\"...\",\"message\":\"success\"}",
|
|||
|
|
"duration": "150ms",
|
|||
|
|
"timestamp": "2024-01-01T12:00:01Z"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 错误日志示例
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"level": "error",
|
|||
|
|
"msg": "西部数据API错误",
|
|||
|
|
"request_id": "westdex_a1b2c3d4",
|
|||
|
|
"api_code": "G05HZ01",
|
|||
|
|
"error": "数据源异常: 查询失败",
|
|||
|
|
"request_data": {
|
|||
|
|
"param1": "value1",
|
|||
|
|
"param2": "value2"
|
|||
|
|
},
|
|||
|
|
"timestamp": "2024-01-01T12:00:01Z"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 性能日志示例
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"level": "info",
|
|||
|
|
"msg": "西部数据API性能",
|
|||
|
|
"request_id": "westdex_a1b2c3d4",
|
|||
|
|
"api_code": "G05HZ01",
|
|||
|
|
"duration": "150ms",
|
|||
|
|
"success": true,
|
|||
|
|
"timestamp": "2024-01-01T12:00:01Z"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔍 日志字段说明
|
|||
|
|
|
|||
|
|
### 通用字段
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `request_id` | string | 请求唯一标识符 |
|
|||
|
|
| `api_code` | string | API代码 |
|
|||
|
|
| `timestamp` | string | 时间戳(ISO8601格式) |
|
|||
|
|
|
|||
|
|
### 请求日志字段
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `url` | string | 完整的请求URL |
|
|||
|
|
| `request_data` | object | 请求数据 |
|
|||
|
|
|
|||
|
|
### 响应日志字段
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `status_code` | int | HTTP状态码 |
|
|||
|
|
| `response_data` | string | 响应数据(JSON字符串) |
|
|||
|
|
| `duration` | duration | 请求耗时 |
|
|||
|
|
|
|||
|
|
### 错误日志字段
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `error` | error | 错误信息 |
|
|||
|
|
| `request_data` | object | 原始请求数据 |
|
|||
|
|
|
|||
|
|
### 性能日志字段
|
|||
|
|
|
|||
|
|
| 字段 | 类型 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `duration` | duration | 请求耗时 |
|
|||
|
|
| `success` | bool | 是否成功 |
|
|||
|
|
|
|||
|
|
## 🎯 最佳实践
|
|||
|
|
|
|||
|
|
### 1. **日志配置优化**
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# 生产环境配置
|
|||
|
|
logging:
|
|||
|
|
enabled: true
|
|||
|
|
log_dir: "/var/log/westdex"
|
|||
|
|
use_daily: true
|
|||
|
|
enable_level_separation: true
|
|||
|
|
level_configs:
|
|||
|
|
request:
|
|||
|
|
max_size: 200 # 更大的文件大小
|
|||
|
|
max_backups: 10 # 更多备份
|
|||
|
|
max_age: 90 # 保留更久
|
|||
|
|
error:
|
|||
|
|
max_size: 500 # 错误日志文件更大
|
|||
|
|
max_backups: 20 # 更多备份
|
|||
|
|
max_age: 180 # 保留更久
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. **日志分析**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看请求日志
|
|||
|
|
tail -f logs/westdex/2024-01-01/request.log
|
|||
|
|
|
|||
|
|
# 查看错误日志
|
|||
|
|
tail -f logs/westdex/2024-01-01/error.log
|
|||
|
|
|
|||
|
|
# 查看性能日志
|
|||
|
|
tail -f logs/westdex/2024-01-01/performance.log
|
|||
|
|
|
|||
|
|
# 统计API调用次数
|
|||
|
|
grep -c "G05HZ01" logs/westdex/2024-01-01/request.log
|
|||
|
|
|
|||
|
|
# 统计错误率
|
|||
|
|
grep -c "error" logs/westdex/2024-01-01/error.log
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. **性能监控**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看平均响应时间
|
|||
|
|
grep "duration" logs/westdex/2024-01-01/performance.log | \
|
|||
|
|
awk -F'"duration":"' '{print $2}' | \
|
|||
|
|
awk -F'"' '{print $1}' | \
|
|||
|
|
awk -F'ms' '{sum+=$1; count++} END {print "平均响应时间: " sum/count "ms"}'
|
|||
|
|
|
|||
|
|
# 查看成功率
|
|||
|
|
total=$(grep -c "success" logs/westdex/2024-01-01/performance.log)
|
|||
|
|
success=$(grep -c '"success":true' logs/westdex/2024-01-01/performance.log)
|
|||
|
|
echo "成功率: $((success * 100 / total))%"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚨 注意事项
|
|||
|
|
|
|||
|
|
### 1. **日志文件管理**
|
|||
|
|
- 定期清理旧日志文件
|
|||
|
|
- 监控磁盘空间使用
|
|||
|
|
- 配置合适的日志轮转策略
|
|||
|
|
|
|||
|
|
### 2. **敏感信息处理**
|
|||
|
|
- 日志中可能包含敏感数据
|
|||
|
|
- 确保日志文件访问权限
|
|||
|
|
- 考虑日志脱敏需求
|
|||
|
|
|
|||
|
|
### 3. **性能影响**
|
|||
|
|
- 日志记录会增加少量性能开销
|
|||
|
|
- 异步日志记录可减少性能影响
|
|||
|
|
- 合理配置日志级别
|
|||
|
|
|
|||
|
|
## 🔧 故障排除
|
|||
|
|
|
|||
|
|
### 1. **日志文件未创建**
|
|||
|
|
- 检查日志目录权限
|
|||
|
|
- 确认日志配置已启用
|
|||
|
|
- 验证文件路径配置
|
|||
|
|
|
|||
|
|
### 2. **日志记录不完整**
|
|||
|
|
- 检查日志器是否正确初始化
|
|||
|
|
- 确认请求ID生成逻辑
|
|||
|
|
- 验证错误处理流程
|
|||
|
|
|
|||
|
|
### 3. **性能问题**
|
|||
|
|
- 检查日志文件大小和数量
|
|||
|
|
- 确认日志轮转配置
|
|||
|
|
- 监控磁盘I/O性能
|
|||
|
|
|
|||
|
|
## 🎉 总结
|
|||
|
|
|
|||
|
|
西部数据日志系统提供了完整的API调用追踪能力:
|
|||
|
|
|
|||
|
|
1. **请求追踪**: 通过唯一请求ID关联请求和响应
|
|||
|
|
2. **错误监控**: 记录所有错误和异常情况
|
|||
|
|
3. **性能分析**: 提供详细的性能指标
|
|||
|
|
4. **文件管理**: 支持按日期分包和级别分离
|
|||
|
|
5. **配置灵活**: 支持自定义日志配置
|
|||
|
|
|
|||
|
|
通过合理使用这个日志系统,您可以:
|
|||
|
|
- 快速定位API调用问题
|
|||
|
|
- 监控系统性能和稳定性
|
|||
|
|
- 分析API使用模式和趋势
|
|||
|
|
- 提高问题排查效率
|
|||
|
|
|
|||
|
|
现在您的西部数据服务已经具备了完整的日志记录能力!🚀
|