# 通用外部服务日志系统使用示例 ## 概述 这个通用的外部服务日志系统允许 westdex 和 zhicha 服务共享相同的日志基础架构,但保持各自独立的日志文件目录。 ## 目录结构 使用共享日志系统后,日志目录结构如下: ``` logs/ ├── external_services/ # 外部服务日志根目录 │ ├── westdex/ # westdex 服务日志 │ │ ├── westdex_info.log │ │ ├── westdex_error.log │ │ └── westdex_warn.log │ ├── zhicha/ # zhicha 服务日志 │ │ ├── zhicha_info.log │ │ ├── zhicha_error.log │ │ └── zhicha_warn.log │ └── yushan/ # yushan 服务日志 │ ├── yushan_info.log │ ├── yushan_error.log │ └── yushan_warn.log ``` ## 配置示例 ### 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 # 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/` 目录。