7.9 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			7.9 KiB
		
	
	
	
	
	
	
	
通用外部服务日志系统
概述
这是一个为外部服务(如 westdex、zhicha、yushan 等)提供统一日志记录功能的通用系统。所有外部服务共享相同的日志基础架构,但保持各自独立的日志文件目录。
设计目标
- 代码复用: 避免重复的日志实现代码
- 统一格式: 所有外部服务使用相同的日志格式
- 独立存储: 每个服务的日志存储在独立目录中
- 灵活配置: 支持每个服务独立的日志配置
- 易于扩展: 新增外部服务时只需简单配置
架构特点
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加密
日志格式
所有服务的日志都包含以下标准字段:
{
  "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": "错误信息"
}
配置结构
# 外部服务日志根目录
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 }
    # 新增:请求和响应日志的独立配置
    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 }
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 }
    # 新增:请求和响应日志的独立配置
    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 }
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. 从配置创建服务
// 推荐方式:从配置文件创建
westdexService, err := westdex.NewWestDexServiceWithConfig(cfg)
zhichaService, err := zhicha.NewZhichaServiceWithConfig(cfg)
yushanService, err := yushan.NewYushanServiceWithConfig(cfg)
2. 自定义日志配置
loggingConfig := external_logger.ExternalServiceLoggingConfig{
    Enabled: true,
    LogDir: "./logs/external_services",
    ServiceName: "custom_service",
    EnableLevelSeparation: true,
    // ... 其他配置
}
service := NewCustomServiceWithLogging(url, key, secret, loggingConfig)
3. 简单模式(无日志)
// 创建无日志的服务实例
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 (回退文件)
扩展新服务
要添加新的外部服务,只需:
- 在服务中使用 external_logger.ExternalServiceLogger
- 设置合适的 ServiceName
- 使用统一的日志接口
- 在配置文件中添加相应的日志配置
// 新服务示例
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,
    }
}
优势总结
- 维护简便: 只需维护一套日志代码
- 格式统一: 所有服务使用相同的日志格式
- 配置灵活: 支持每个服务独立的配置
- 易于扩展: 新增服务只需简单配置
- 性能优化: 共享的日志基础设施
- 监控友好: 统一的日志格式便于监控和分析
- 智能分隔: 支持按大小+时间混合分隔策略
- 自动清理: 自动清理过期的日志目录,节省磁盘空间
- 故障回退: 如果按天分隔失败,自动回退到传统方式
注意事项
- 确保日志目录有足够的磁盘空间
- 定期清理过期的日志文件
- 监控日志文件大小,避免磁盘空间不足
- 在生产环境中建议启用日志压缩
- 根据业务需求调整日志保留策略
- 启用按天分隔时,确保系统时间准确
- 监控自动清理任务的执行情况
- 建议在生产环境中设置合理的 MaxAge值,避免日志文件过多