# 任务02:日志系统实现 ## 任务描述 实现Installer Builder项目的日志系统,包括Logger接口及其默认实现。日志系统将支持不同的日志级别、格式化输出和上下文信息,为整个项目提供统一的日志记录机制。 ## 实现步骤 1. 定义Logger接口: - 在`internal/common/log`包中创建`logger.go`文件 - 定义Logger接口,包含以下方法: ```go type Logger interface { Debug(msg string, args ...interface{}) Info(msg string, args ...interface{}) Warn(msg string, args ...interface{}) Error(msg string, args ...interface{}) Fatal(msg string, args ...interface{}) WithField(key string, value interface{}) Logger WithFields(fields map[string]interface{}) Logger } ``` 2. 定义日志级别: - 创建LogLevel类型和常量: ```go type LogLevel int const ( DebugLevel LogLevel = iota InfoLevel WarnLevel ErrorLevel FatalLevel ) ``` - 实现LogLevel的String()方法,用于字符串表示 3. 实现DefaultLogger: - 创建DefaultLogger结构体,实现Logger接口 - 支持配置日志级别、输出目标和格式 - 实现字段上下文,支持WithField和WithFields方法 - 支持彩色输出(可选,根据终端类型) 4. 实现日志格式化: - 支持不同的日志格式(文本、JSON) - 包含时间戳、日志级别、消息和字段信息 - 实现格式化器接口,允许自定义格式 5. 实现日志输出: - 支持多种输出目标(控制台、文件、网络) - 实现输出接口,允许自定义输出目标 - 支持同时输出到多个目标 6. 创建日志工厂: - 实现NewLogger函数,用于创建Logger实例 - 支持从配置创建Logger - 提供默认的全局Logger实例 7. 实现日志上下文传递: - 支持从父Logger创建子Logger,继承上下文 - 实现上下文合并功能 ## 单元测试要求 1. 测试Logger接口实现: - 验证所有方法按预期工作 - 测试不同日志级别的过滤 2. 测试日志格式化: - 验证不同格式的输出正确性 - 测试特殊字符和多行消息的处理 3. 测试日志输出: - 验证不同输出目标的正确性 - 测试并发写入的安全性 4. 测试上下文功能: - 验证WithField和WithFields方法 - 测试上下文继承和合并 5. 测试性能: - 基准测试不同日志级别和格式的性能 - 测试高并发场景下的性能 ## 依赖关系 - 依赖任务01(项目初始化) - 被任务03(错误处理框架)依赖 ## 完成标准 1. Logger接口已定义并文档完善 2. DefaultLogger实现了所有接口方法 3. 支持所有指定的日志级别 4. 支持字段上下文和格式化 5. 支持多种输出目标 6. 所有单元测试通过 7. 性能满足项目需求 8. 代码符合项目的Go语言开发规范