# Logger Package 基于Go理念设计的简单、高性能日志和审计系统。 ## 特性 - **简单性**: 最小化API,专注于核心功能 - **可组合性**: 支持选项模式和中间件组合 - **并发安全**: 所有操作都是goroutine安全的 - **接口导向**: 基于接口设计,便于测试和扩展 - **高性能**: 基于Uber Zap的高性能结构化日志 - **审计功能**: 完整的用户操作和系统事件审计 ## 安装 ```bash go get go.uber.org/zap go get modernc.org/sqlite go get github.com/gin-gonic/gin ``` ## 快速开始 ### 基本日志使用 ```go package main import ( "your-project/service/common/logger" ) func main() { // 创建日志器 log, err := logger.NewLogger( logger.WithDevelopment(true), logger.WithOutputPaths("stdout", "app.log"), ) if err != nil { panic(err) } defer log.Sync() // 使用日志 log.Info("应用启动") log.Error("发生错误", zap.Error(err)) } ``` ### 审计功能使用 ```go // 创建审计日志器 audit, err := logger.NewAuditLogger( logger.WithDatabasePath("audit.db"), logger.WithRetention(90), // 保留90天 ) if err != nil { panic(err) } defer audit.Sync() // 记录审计事件 entry := &logger.AuditEntry{ UserID: "user123", Username: "john_doe", Action: "login", IP: "192.168.1.1", Success: true, } err = audit.Record(entry) ``` ### HTTP中间件使用 ```go r := gin.New() // 添加审计和日志中间件 r.Use(logger.AuditMiddleware(audit, log)) r.Use(logger.RequestLogger(log)) r.Use(logger.RecoveryMiddleware(log)) // 你的路由 r.GET("/users", func(c *gin.Context) { // 自动记录审计和请求日志 c.JSON(200, users) }) ``` ## API 文档 ### Logger 接口 ```go type Logger interface { Debug(msg string, fields ...zap.Field) Info(msg string, fields ...zap.Field) Warn(msg string, fields ...zap.Field) Error(msg string, fields ...zap.Field) Fatal(msg string, fields ...zap.Field) With(fields ...zap.Field) Logger Named(name string) Logger Sync() error } ``` ### AuditLogger 接口 ```go type AuditLogger interface { Record(entry *AuditEntry) error Query(filter *AuditFilter) ([]*AuditEntry, error) Cleanup(retention time.Duration) error Sync() error } ``` ### 配置选项 #### Logger 选项 - `WithLevel(level zapcore.Level)`: 设置日志级别 - `WithOutputPaths(paths ...string)`: 设置输出路径 - `WithDevelopment(dev bool)`: 设置开发模式 - `WithEncoding(encoding string)`: 设置编码格式 #### AuditLogger 选项 - `WithDatabasePath(path string)`: 设置数据库路径 - `WithRetention(days int)`: 设置保留天数 - `WithBufferSize(size int)`: 设置缓冲区大小 - `WithEnabled(enabled bool)`: 启用/禁用审计 ## 高级用法 ### 上下文日志 ```go // 将日志器放入上下文 ctx := logger.WithContext(context.Background(), logger) // 从上下文获取日志器 log := logger.FromContext(ctx) ``` ### 审计助手 ```go helper := logger.NewAuditHelper(audit, logger) // 便捷的审计方法 helper.RecordLogin(userID, username, ip, userAgent, success) helper.RecordUserAction(userID, username, action, resource, resourceID, ip, success) helper.RecordSystemEvent(event, details) ``` ### 查询审计日志 ```go filter := &logger.AuditFilter{ UserID: "user123", Action: "login", StartTime: &startTime, EndTime: &endTime, Limit: 100, } entries, err := audit.Query(filter) ``` ## 测试 运行测试: ```bash go test -v ./service/common/logger ``` ## 设计理念 ### 简单性 (Simplicity) - 最小化API设计 - 清晰的职责分离 - 直观的接口 ### 可组合性 (Composition) - 选项模式配置 - 中间件组合 - 接口组合 ### 并发安全 (Concurrency) - goroutine安全 - 上下文集成 - 优雅关闭 ### 错误处理 (Error Handling) - 显式错误返回 - 错误包装 - 错误检查 ### 接口导向 (Interface-oriented) - 小接口设计 - 依赖注入 - 便于测试 ## 性能优化 - 使用对象池复用审计对象 - 异步审计写入 - 数据库索引优化 - 定期清理过期数据 ## 许可证 遵循项目许可证。