| 
									
										
										
										
											2025-08-25 15:44:06 +08:00
										 |  |  |  | # 通用外部服务日志系统使用示例
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ## 概述
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 这个通用的外部服务日志系统允许 westdex 和 zhicha 服务共享相同的日志基础架构,但保持各自独立的日志文件目录。 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ## 目录结构
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 使用共享日志系统后,日志目录结构如下: | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | logs/ | 
					
						
							|  |  |  |  | ├── external_services/           # 外部服务日志根目录 | 
					
						
							|  |  |  |  | │   ├── westdex/                # westdex 服务日志 | 
					
						
							|  |  |  |  | │   │   ├── westdex_info.log | 
					
						
							|  |  |  |  | │   │   ├── westdex_error.log | 
					
						
							| 
									
										
										
										
											2025-08-27 22:19:19 +08:00
										 |  |  |  | │   │   ├── westdex_warn.log | 
					
						
							|  |  |  |  | │   │   ├── westdex_request.log    # 新增:请求日志文件 | 
					
						
							|  |  |  |  | │   │   └── westdex_response.log   # 新增:响应日志文件 | 
					
						
							| 
									
										
										
										
											2025-08-25 15:44:06 +08:00
										 |  |  |  | │   ├── zhicha/                 # zhicha 服务日志 | 
					
						
							|  |  |  |  | │   │   ├── zhicha_info.log | 
					
						
							|  |  |  |  | │   │   ├── zhicha_error.log | 
					
						
							| 
									
										
										
										
											2025-08-27 22:19:19 +08:00
										 |  |  |  | │   │   ├── zhicha_warn.log | 
					
						
							|  |  |  |  | │   │   ├── zhicha_request.log    # 新增:请求日志文件 | 
					
						
							|  |  |  |  | │   │   └── zhicha_response.log   # 新增:响应日志文件 | 
					
						
							| 
									
										
										
										
											2025-08-25 15:44:06 +08:00
										 |  |  |  | │   └── yushan/                 # yushan 服务日志 | 
					
						
							|  |  |  |  | │       ├── yushan_info.log | 
					
						
							|  |  |  |  | │       ├── yushan_error.log | 
					
						
							| 
									
										
										
										
											2025-08-27 22:19:19 +08:00
										 |  |  |  | │       ├── yushan_warn.log | 
					
						
							|  |  |  |  | │       ├── yushan_request.log    # 新增:请求日志文件 | 
					
						
							|  |  |  |  | │       └── yushan_response.log   # 新增:响应日志文件 | 
					
						
							| 
									
										
										
										
											2025-08-25 15:44:06 +08:00
										 |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ## 配置示例
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ### 1. 在 config.yaml 中配置
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ```yaml | 
					
						
							|  |  |  |  | # 外部服务日志根目录
 | 
					
						
							|  |  |  |  | external_services_log_dir: "./logs/external_services" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # westdex 配置
 | 
					
						
							|  |  |  |  | westdex: | 
					
						
							|  |  |  |  |   url: "https://api.westdex.com" | 
					
						
							|  |  |  |  |   key: "your_key" | 
					
						
							|  |  |  |  |   secret_id: "your_secret_id" | 
					
						
							|  |  |  |  |   secret_second_id: "your_secret_second_id" | 
					
						
							|  |  |  |  |   logging: | 
					
						
							|  |  |  |  |     enabled: true | 
					
						
							|  |  |  |  |     log_dir: "./logs/external_services"  # 使用共享根目录 | 
					
						
							|  |  |  |  |     enable_level_separation: true | 
					
						
							|  |  |  |  |     level_configs: | 
					
						
							|  |  |  |  |       info: | 
					
						
							|  |  |  |  |         max_size: 100 | 
					
						
							|  |  |  |  |         max_backups: 3 | 
					
						
							|  |  |  |  |         max_age: 28 | 
					
						
							|  |  |  |  |         compress: true | 
					
						
							|  |  |  |  |       error: | 
					
						
							|  |  |  |  |         max_size: 100 | 
					
						
							|  |  |  |  |         max_backups: 3 | 
					
						
							|  |  |  |  |         max_age: 28 | 
					
						
							|  |  |  |  |         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 配置
 | 
					
						
							|  |  |  |  | zhicha: | 
					
						
							|  |  |  |  |   url: "https://www.zhichajinkong.com/dataMiddle/api/handle" | 
					
						
							|  |  |  |  |   app_id: "your_app_id" | 
					
						
							|  |  |  |  |   app_secret: "your_app_secret" | 
					
						
							|  |  |  |  |   pro_id: "your_pro_id" | 
					
						
							|  |  |  |  |   logging: | 
					
						
							|  |  |  |  |     enabled: true | 
					
						
							|  |  |  |  |     log_dir: "./logs/external_services"  # 使用共享根目录 | 
					
						
							|  |  |  |  |     enable_level_separation: true | 
					
						
							|  |  |  |  |     level_configs: | 
					
						
							|  |  |  |  |       info: | 
					
						
							|  |  |  |  |         max_size: 100 | 
					
						
							|  |  |  |  |         max_backups: 3 | 
					
						
							|  |  |  |  |         max_age: 28 | 
					
						
							|  |  |  |  |         compress: true | 
					
						
							|  |  |  |  |       error: | 
					
						
							|  |  |  |  |         max_size: 100 | 
					
						
							|  |  |  |  |         max_backups: 3 | 
					
						
							|  |  |  |  |         max_age: 28 | 
					
						
							|  |  |  |  |         compress: true | 
					
						
							|  |  |  |  |       warn: | 
					
						
							|  |  |  |  |         max_size: 100 | 
					
						
							|  |  |  |  |         max_backups: 3 | 
					
						
							|  |  |  |  |         max_age: 28 | 
					
						
							|  |  |  |  |         compress: true | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # yushan 配置
 | 
					
						
							|  |  |  |  | yushan: | 
					
						
							|  |  |  |  |   url: "https://api.yushan.com" | 
					
						
							|  |  |  |  |   api_key: "your_api_key" | 
					
						
							|  |  |  |  |   acct_id: "your_acct_id" | 
					
						
							|  |  |  |  |   logging: | 
					
						
							|  |  |  |  |     enabled: true | 
					
						
							|  |  |  |  |     log_dir: "./logs/external_services"  # 使用共享根目录 | 
					
						
							|  |  |  |  |     enable_level_separation: true | 
					
						
							|  |  |  |  |     level_configs: | 
					
						
							|  |  |  |  |       info: | 
					
						
							|  |  |  |  |         max_size: 100 | 
					
						
							|  |  |  |  |         max_backups: 3 | 
					
						
							|  |  |  |  |         max_age: 28 | 
					
						
							|  |  |  |  |         compress: true | 
					
						
							|  |  |  |  |       error: | 
					
						
							|  |  |  |  |         max_size: 100 | 
					
						
							|  |  |  |  |         max_backups: 3 | 
					
						
							|  |  |  |  |         max_age: 28 | 
					
						
							|  |  |  |  |         compress: true | 
					
						
							|  |  |  |  |       warn: | 
					
						
							|  |  |  |  |         max_size: 100 | 
					
						
							|  |  |  |  |         max_backups: 3 | 
					
						
							|  |  |  |  |         max_age: 28 | 
					
						
							|  |  |  |  |         compress: true | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ## 使用方法
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ### 1. 创建 WestDex 服务
 | 
					
						
							|  |  |  |  | ```go | 
					
						
							|  |  |  |  | import "tyapi-server/internal/infrastructure/external/westdex" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // 从配置创建(推荐) | 
					
						
							|  |  |  |  | westdexService, err := westdex.NewWestDexServiceWithConfig(cfg) | 
					
						
							|  |  |  |  | if err != nil { | 
					
						
							|  |  |  |  |     log.Fatal(err) | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // 使用自定义日志配置 | 
					
						
							|  |  |  |  | loggingConfig := external_logger.ExternalServiceLoggingConfig{ | 
					
						
							|  |  |  |  |     Enabled: true, | 
					
						
							|  |  |  |  |     LogDir: "./logs/external_services", | 
					
						
							|  |  |  |  |     ServiceName: "westdex", // 会自动设置 | 
					
						
							|  |  |  |  |     EnableLevelSeparation: true, | 
					
						
							|  |  |  |  |     // ... 其他配置 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | westdexService, err := westdex.NewWestDexServiceWithLogging( | 
					
						
							|  |  |  |  |     "url", "key", "secretID", "secretSecondID",  | 
					
						
							|  |  |  |  |     loggingConfig, | 
					
						
							|  |  |  |  | ) | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ### 2. 创建 Zhicha 服务
 | 
					
						
							|  |  |  |  | ```go | 
					
						
							|  |  |  |  | import "tyapi-server/internal/infrastructure/external/zhicha" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // 从配置创建(推荐) | 
					
						
							|  |  |  |  | zhichaService, err := zhicha.NewZhichaServiceWithConfig(cfg) | 
					
						
							|  |  |  |  | if err != nil { | 
					
						
							|  |  |  |  |     log.Fatal(err) | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // 使用自定义日志配置 | 
					
						
							|  |  |  |  | loggingConfig := external_logger.ExternalServiceLoggingConfig{ | 
					
						
							|  |  |  |  |     Enabled: true, | 
					
						
							|  |  |  |  |     LogDir: "./logs/external_services", | 
					
						
							|  |  |  |  |     ServiceName: "zhicha", // 会自动设置 | 
					
						
							|  |  |  |  |     EnableLevelSeparation: true, | 
					
						
							|  |  |  |  |     // ... 其他配置 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | zhichaService, err := zhicha.NewZhichaServiceWithLogging( | 
					
						
							|  |  |  |  |     "url", "appID", "appSecret", "proID", | 
					
						
							|  |  |  |  |     loggingConfig, | 
					
						
							|  |  |  |  | ) | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ### 3. 创建 Yushan 服务
 | 
					
						
							|  |  |  |  | ```go | 
					
						
							|  |  |  |  | import "tyapi-server/internal/infrastructure/external/yushan" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // 从配置创建(推荐) | 
					
						
							|  |  |  |  | yushanService, err := yushan.NewYushanServiceWithConfig(cfg) | 
					
						
							|  |  |  |  | if err != nil { | 
					
						
							|  |  |  |  |     log.Fatal(err) | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // 使用自定义日志配置 | 
					
						
							|  |  |  |  | loggingConfig := external_logger.ExternalServiceLoggingConfig{ | 
					
						
							|  |  |  |  |     Enabled: true, | 
					
						
							|  |  |  |  |     LogDir: "./logs/external_services", | 
					
						
							|  |  |  |  |     ServiceName: "yushan", // 会自动设置 | 
					
						
							|  |  |  |  |     EnableLevelSeparation: true, | 
					
						
							|  |  |  |  |     // ... 其他配置 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | yushanService, err := yushan.NewYushanServiceWithLogging( | 
					
						
							|  |  |  |  |     "url", "apiKey", "acctID", | 
					
						
							|  |  |  |  |     loggingConfig, | 
					
						
							|  |  |  |  | ) | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ## 日志内容示例
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ### WestDex 日志内容
 | 
					
						
							|  |  |  |  | ```json | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   "level": "INFO", | 
					
						
							|  |  |  |  |   "timestamp": "2024-01-01T12:00:00Z", | 
					
						
							|  |  |  |  |   "msg": "westdex API请求", | 
					
						
							|  |  |  |  |   "service": "westdex", | 
					
						
							|  |  |  |  |   "request_id": "westdex_12345678", | 
					
						
							|  |  |  |  |   "api_code": "G05HZ01", | 
					
						
							|  |  |  |  |   "url": "https://api.westdex.com/G05HZ01", | 
					
						
							|  |  |  |  |   "params": {...} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ### Zhicha 日志内容
 | 
					
						
							|  |  |  |  | ```json | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   "level": "INFO",  | 
					
						
							|  |  |  |  |   "timestamp": "2024-01-01T12:00:00Z", | 
					
						
							|  |  |  |  |   "msg": "zhicha API请求", | 
					
						
							|  |  |  |  |   "service": "zhicha", | 
					
						
							|  |  |  |  |   "request_id": "zhicha_87654321", | 
					
						
							|  |  |  |  |   "api_code": "handle", | 
					
						
							|  |  |  |  |   "url": "https://www.zhichajinkong.com/dataMiddle/api/handle", | 
					
						
							|  |  |  |  |   "params": {...} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ### Yushan 日志内容
 | 
					
						
							|  |  |  |  | ```json | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   "level": "INFO", | 
					
						
							|  |  |  |  |   "timestamp": "2024-01-01T12:00:00Z",  | 
					
						
							|  |  |  |  |   "msg": "yushan API请求", | 
					
						
							|  |  |  |  |   "service": "yushan", | 
					
						
							|  |  |  |  |   "request_id": "yushan_12345678", | 
					
						
							|  |  |  |  |   "api_code": "G05HZ01", | 
					
						
							|  |  |  |  |   "url": "https://api.yushan.com", | 
					
						
							|  |  |  |  |   "params": {...} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ## 优势
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ### 1. 代码复用
 | 
					
						
							|  |  |  |  | - 相同的日志基础架构 | 
					
						
							|  |  |  |  | - 统一的日志格式 | 
					
						
							|  |  |  |  | - 相同的配置结构 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ### 2. 维护简便
 | 
					
						
							|  |  |  |  | - 只需维护一套日志代码 | 
					
						
							|  |  |  |  | - 统一的日志级别管理 | 
					
						
							|  |  |  |  | - 统一的文件轮转策略 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ### 3. 清晰分离
 | 
					
						
							|  |  |  |  | - 每个服务有独立的日志目录 | 
					
						
							|  |  |  |  | - 通过 `service` 字段区分来源 | 
					
						
							|  |  |  |  | - 可独立配置每个服务的日志参数 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ### 4. 扩展性
 | 
					
						
							|  |  |  |  | - 易于添加新的外部服务 | 
					
						
							|  |  |  |  | - 统一的日志接口 | 
					
						
							|  |  |  |  | - 灵活的配置选项 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ## 添加新的外部服务
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 要添加新的外部服务(如 TianYanCha),只需: | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 1. 在服务中使用 `external_logger.ExternalServiceLogger` | 
					
						
							|  |  |  |  | 2. 设置合适的 `ServiceName` | 
					
						
							|  |  |  |  | 3. 使用统一的日志接口 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ```go | 
					
						
							|  |  |  |  | // 新服务示例 | 
					
						
							|  |  |  |  | func NewTianYanChaService(config TianYanChaConfig) *TianYanChaService { | 
					
						
							|  |  |  |  |     loggingConfig := external_logger.ExternalServiceLoggingConfig{ | 
					
						
							|  |  |  |  |         ServiceName: "tianyancha", | 
					
						
							|  |  |  |  |         LogDir: config.LogDir, | 
					
						
							|  |  |  |  |         // ... 其他配置 | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     logger, _ := external_logger.NewExternalServiceLogger(loggingConfig) | 
					
						
							|  |  |  |  |      | 
					
						
							|  |  |  |  |     return &TianYanChaService{ | 
					
						
							|  |  |  |  |         config: config, | 
					
						
							|  |  |  |  |         logger: logger, | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 这样新服务的日志会自动保存到 `logs/external_services/tianyancha/` 目录。 |