2025-08-25 15:44:06 +08:00
|
|
|
|
# 通用外部服务日志系统
|
|
|
|
|
|
|
|
|
|
|
|
## 概述
|
|
|
|
|
|
|
|
|
|
|
|
这是一个为外部服务(如 westdex、zhicha、yushan 等)提供统一日志记录功能的通用系统。所有外部服务共享相同的日志基础架构,但保持各自独立的日志文件目录。
|
|
|
|
|
|
|
|
|
|
|
|
## 设计目标
|
|
|
|
|
|
|
|
|
|
|
|
1. **代码复用**: 避免重复的日志实现代码
|
|
|
|
|
|
2. **统一格式**: 所有外部服务使用相同的日志格式
|
|
|
|
|
|
3. **独立存储**: 每个服务的日志存储在独立目录中
|
|
|
|
|
|
4. **灵活配置**: 支持每个服务独立的日志配置
|
|
|
|
|
|
5. **易于扩展**: 新增外部服务时只需简单配置
|
|
|
|
|
|
|
|
|
|
|
|
## 架构特点
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 共享核心
|
|
|
|
|
|
- 统一的日志接口
|
|
|
|
|
|
- 相同的日志格式
|
|
|
|
|
|
- 一致的配置结构
|
|
|
|
|
|
- 共用的文件轮转策略
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 服务分离
|
|
|
|
|
|
- 每个服务有独立的日志目录
|
|
|
|
|
|
- 通过 `service` 字段区分来源
|
|
|
|
|
|
- 可独立配置每个服务的日志参数
|
|
|
|
|
|
- 支持按级别分离日志文件
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 配置灵活
|
|
|
|
|
|
- 支持从配置文件读取
|
|
|
|
|
|
- 支持自定义配置创建
|
|
|
|
|
|
- 支持简单模式(无日志)
|
|
|
|
|
|
- 支持日志级别分离
|
|
|
|
|
|
|
|
|
|
|
|
## 已集成的服务
|
|
|
|
|
|
|
|
|
|
|
|
### 1. WestDex (西部数据)
|
|
|
|
|
|
- 服务名称: `westdex`
|
|
|
|
|
|
- 日志目录: `logs/external_services/westdex/`
|
|
|
|
|
|
- 主要功能: 企业信息查询
|
|
|
|
|
|
|
|
|
|
|
|
### 2. Zhicha (智查金控)
|
|
|
|
|
|
- 服务名称: `zhicha`
|
|
|
|
|
|
- 日志目录: `logs/external_services/zhicha/`
|
|
|
|
|
|
- 主要功能: 企业信息查询、AES加密
|
|
|
|
|
|
|
|
|
|
|
|
### 3. Yushan (羽山)
|
|
|
|
|
|
- 服务名称: `yushan`
|
|
|
|
|
|
- 日志目录: `logs/external_services/yushan/`
|
|
|
|
|
|
- 主要功能: 企业信息查询、AES加密
|
|
|
|
|
|
|
|
|
|
|
|
## 日志格式
|
|
|
|
|
|
|
|
|
|
|
|
所有服务的日志都包含以下标准字段:
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"level": "INFO",
|
|
|
|
|
|
"timestamp": "2024-01-01T12:00:00Z",
|
|
|
|
|
|
"msg": "服务名 API请求",
|
|
|
|
|
|
"service": "服务名",
|
|
|
|
|
|
"request_id": "服务名_唯一ID",
|
|
|
|
|
|
"api_code": "API代码",
|
|
|
|
|
|
"url": "请求URL",
|
|
|
|
|
|
"params": "请求参数",
|
|
|
|
|
|
"status_code": "响应状态码",
|
|
|
|
|
|
"response": "响应内容",
|
|
|
|
|
|
"duration": "请求耗时",
|
|
|
|
|
|
"error": "错误信息"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 配置结构
|
|
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
# 外部服务日志根目录
|
|
|
|
|
|
external_services_log_dir: "./logs/external_services"
|
|
|
|
|
|
|
|
|
|
|
|
# 各服务配置
|
|
|
|
|
|
westdex:
|
|
|
|
|
|
logging:
|
|
|
|
|
|
enabled: true
|
|
|
|
|
|
log_dir: "./logs/external_services"
|
|
|
|
|
|
service_name: "westdex"
|
|
|
|
|
|
use_daily: true # 启用按天分隔
|
|
|
|
|
|
enable_level_separation: true # 启用级别分离
|
|
|
|
|
|
level_configs:
|
|
|
|
|
|
info: { max_size: 100, max_backups: 3, max_age: 28, compress: true }
|
|
|
|
|
|
error: { max_size: 200, max_backups: 10, max_age: 90, compress: true }
|
|
|
|
|
|
warn: { max_size: 100, max_backups: 3, max_age: 28, compress: true }
|
2025-08-27 22:19:19 +08:00
|
|
|
|
# 新增:请求和响应日志的独立配置
|
|
|
|
|
|
request_log_config: { max_size: 100, max_backups: 5, max_age: 30, compress: true }
|
|
|
|
|
|
response_log_config: { max_size: 100, max_backups: 5, max_age: 30, compress: true }
|
2025-08-25 15:44:06 +08:00
|
|
|
|
|
|
|
|
|
|
zhicha:
|
|
|
|
|
|
logging:
|
|
|
|
|
|
enabled: true
|
|
|
|
|
|
log_dir: "./logs/external_services"
|
|
|
|
|
|
service_name: "zhicha"
|
|
|
|
|
|
use_daily: true # 启用按天分隔
|
|
|
|
|
|
enable_level_separation: true # 启用级别分离
|
|
|
|
|
|
level_configs:
|
|
|
|
|
|
info: { max_size: 100, max_backups: 3, max_age: 28, compress: true }
|
|
|
|
|
|
error: { max_size: 200, max_backups: 10, max_age: 90, compress: true }
|
|
|
|
|
|
warn: { max_size: 100, max_backups: 3, max_age: 28, compress: true }
|
2025-08-27 22:19:19 +08:00
|
|
|
|
# 新增:请求和响应日志的独立配置
|
|
|
|
|
|
request_log_config: { max_size: 100, max_backups: 5, max_age: 30, compress: true }
|
|
|
|
|
|
response_log_config: { max_size: 100, max_backups: 5, max_age: 30, compress: true }
|
2025-08-25 15:44:06 +08:00
|
|
|
|
|
|
|
|
|
|
yushan:
|
|
|
|
|
|
logging:
|
|
|
|
|
|
enabled: true
|
|
|
|
|
|
log_dir: "./logs/external_services"
|
|
|
|
|
|
service_name: "yushan"
|
|
|
|
|
|
use_daily: true # 启用按天分隔
|
|
|
|
|
|
enable_level_separation: true # 启用级别分离
|
|
|
|
|
|
level_configs:
|
|
|
|
|
|
info: { max_size: 100, max_backups: 3, max_age: 28, compress: true }
|
|
|
|
|
|
error: { max_size: 200, max_backups: 10, max_age: 90, compress: true }
|
|
|
|
|
|
warn: { max_size: 100, max_backups: 3, max_age: 28, compress: true }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 使用方法
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 从配置创建服务
|
|
|
|
|
|
```go
|
|
|
|
|
|
// 推荐方式:从配置文件创建
|
|
|
|
|
|
westdexService, err := westdex.NewWestDexServiceWithConfig(cfg)
|
|
|
|
|
|
zhichaService, err := zhicha.NewZhichaServiceWithConfig(cfg)
|
|
|
|
|
|
yushanService, err := yushan.NewYushanServiceWithConfig(cfg)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 自定义日志配置
|
|
|
|
|
|
```go
|
|
|
|
|
|
loggingConfig := external_logger.ExternalServiceLoggingConfig{
|
|
|
|
|
|
Enabled: true,
|
|
|
|
|
|
LogDir: "./logs/external_services",
|
|
|
|
|
|
ServiceName: "custom_service",
|
|
|
|
|
|
EnableLevelSeparation: true,
|
|
|
|
|
|
// ... 其他配置
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
service := NewCustomServiceWithLogging(url, key, secret, loggingConfig)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 简单模式(无日志)
|
|
|
|
|
|
```go
|
|
|
|
|
|
// 创建无日志的服务实例
|
|
|
|
|
|
service := NewServiceSimple(url, key, secret)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 日志级别
|
|
|
|
|
|
|
|
|
|
|
|
### 1. INFO 级别
|
|
|
|
|
|
- API 请求日志
|
|
|
|
|
|
- API 响应日志
|
|
|
|
|
|
- 一般信息日志
|
|
|
|
|
|
|
|
|
|
|
|
### 2. WARN 级别
|
|
|
|
|
|
- 警告信息
|
|
|
|
|
|
- 非致命错误
|
|
|
|
|
|
|
|
|
|
|
|
### 3. ERROR 级别
|
|
|
|
|
|
- API 调用错误
|
|
|
|
|
|
- 系统异常
|
|
|
|
|
|
- 业务逻辑错误
|
|
|
|
|
|
|
|
|
|
|
|
## 文件轮转策略
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 按大小+时间混合分隔
|
|
|
|
|
|
|
|
|
|
|
|
系统支持两种日志分隔策略:
|
|
|
|
|
|
|
|
|
|
|
|
#### 按天分隔(推荐)
|
|
|
|
|
|
- **UseDaily**: 设置为 `true` 时启用
|
|
|
|
|
|
- 每天创建新的日期目录:`logs/westdex/2024-01-01/`
|
|
|
|
|
|
- 在日期目录下按级别分隔:`westdex_info.log`、`westdex_error.log`、`westdex_warn.log`
|
|
|
|
|
|
- 自动清理过期的日期目录
|
|
|
|
|
|
|
|
|
|
|
|
#### 传统方式
|
|
|
|
|
|
- **UseDaily**: 设置为 `false` 时使用
|
|
|
|
|
|
- 直接在服务目录下按级别分隔:`logs/westdex/westdex_info.log`
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 文件轮转配置
|
|
|
|
|
|
|
|
|
|
|
|
每个日志级别都支持以下轮转配置:
|
|
|
|
|
|
|
|
|
|
|
|
- **MaxSize**: 单个文件最大大小(MB)
|
|
|
|
|
|
- **MaxBackups**: 最大备份文件数
|
|
|
|
|
|
- **MaxAge**: 最大保留天数
|
|
|
|
|
|
- **Compress**: 是否压缩旧文件
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 目录结构示例
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
logs/
|
|
|
|
|
|
├── westdex/
|
|
|
|
|
|
│ ├── 2024-01-01/
|
|
|
|
|
|
│ │ ├── westdex_info.log
|
|
|
|
|
|
│ │ ├── westdex_error.log
|
|
|
|
|
|
│ │ └── westdex_warn.log
|
|
|
|
|
|
│ ├── 2024-01-02/
|
|
|
|
|
|
│ │ ├── westdex_info.log
|
|
|
|
|
|
│ │ ├── westdex_error.log
|
|
|
|
|
|
│ │ └── westdex_warn.log
|
|
|
|
|
|
│ └── westdex_info.log (回退文件)
|
|
|
|
|
|
├── zhicha/
|
|
|
|
|
|
│ ├── 2024-01-01/
|
|
|
|
|
|
│ │ ├── zhicha_info.log
|
|
|
|
|
|
│ │ ├── zhicha_error.log
|
|
|
|
|
|
│ │ └── zhicha_warn.log
|
|
|
|
|
|
│ └── zhicha_info.log (回退文件)
|
|
|
|
|
|
└── yushan/
|
|
|
|
|
|
├── 2024-01-01/
|
|
|
|
|
|
│ ├── yushan_info.log
|
|
|
|
|
|
│ ├── yushan_error.log
|
|
|
|
|
|
│ └── yushan_warn.log
|
|
|
|
|
|
└── yushan_info.log (回退文件)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 扩展新服务
|
|
|
|
|
|
|
|
|
|
|
|
要添加新的外部服务,只需:
|
|
|
|
|
|
|
|
|
|
|
|
1. 在服务中使用 `external_logger.ExternalServiceLogger`
|
|
|
|
|
|
2. 设置合适的 `ServiceName`
|
|
|
|
|
|
3. 使用统一的日志接口
|
|
|
|
|
|
4. 在配置文件中添加相应的日志配置
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
|
// 新服务示例
|
|
|
|
|
|
func NewCustomService(config CustomConfig) *CustomService {
|
|
|
|
|
|
loggingConfig := external_logger.ExternalServiceLoggingConfig{
|
|
|
|
|
|
ServiceName: "custom_service",
|
|
|
|
|
|
LogDir: config.LogDir,
|
|
|
|
|
|
// ... 其他配置
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
logger, _ := external_logger.NewExternalServiceLogger(loggingConfig)
|
|
|
|
|
|
|
|
|
|
|
|
return &CustomService{
|
|
|
|
|
|
config: config,
|
|
|
|
|
|
logger: logger,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 优势总结
|
|
|
|
|
|
|
|
|
|
|
|
1. **维护简便**: 只需维护一套日志代码
|
|
|
|
|
|
2. **格式统一**: 所有服务使用相同的日志格式
|
|
|
|
|
|
3. **配置灵活**: 支持每个服务独立的配置
|
|
|
|
|
|
4. **易于扩展**: 新增服务只需简单配置
|
|
|
|
|
|
5. **性能优化**: 共享的日志基础设施
|
|
|
|
|
|
6. **监控友好**: 统一的日志格式便于监控和分析
|
|
|
|
|
|
7. **智能分隔**: 支持按大小+时间混合分隔策略
|
|
|
|
|
|
8. **自动清理**: 自动清理过期的日志目录,节省磁盘空间
|
|
|
|
|
|
9. **故障回退**: 如果按天分隔失败,自动回退到传统方式
|
|
|
|
|
|
|
|
|
|
|
|
## 注意事项
|
|
|
|
|
|
|
|
|
|
|
|
1. 确保日志目录有足够的磁盘空间
|
|
|
|
|
|
2. 定期清理过期的日志文件
|
|
|
|
|
|
3. 监控日志文件大小,避免磁盘空间不足
|
|
|
|
|
|
4. 在生产环境中建议启用日志压缩
|
|
|
|
|
|
5. 根据业务需求调整日志保留策略
|
|
|
|
|
|
6. 启用按天分隔时,确保系统时间准确
|
|
|
|
|
|
7. 监控自动清理任务的执行情况
|
|
|
|
|
|
8. 建议在生产环境中设置合理的 `MaxAge` 值,避免日志文件过多
|
|
|
|
|
|
|