|
|
il y a 2 mois | |
|---|---|---|
| .. | ||
| DESIGN.md | il y a 2 mois | |
| README.md | il y a 2 mois | |
| audit.go | il y a 2 mois | |
| logger.go | il y a 2 mois | |
| logger_test.go | il y a 2 mois | |
| middleware.go | il y a 2 mois | |
| types.go | il y a 2 mois | |
基于Go理念设计的简单、高性能日志和审计系统。
go get go.uber.org/zap
go get modernc.org/sqlite
go get github.com/gin-gonic/gin
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))
}
// 创建审计日志器
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)
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)
})
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
}
type AuditLogger interface {
Record(entry *AuditEntry) error
Query(filter *AuditFilter) ([]*AuditEntry, error)
Cleanup(retention time.Duration) error
Sync() error
}
WithLevel(level zapcore.Level): 设置日志级别WithOutputPaths(paths ...string): 设置输出路径WithDevelopment(dev bool): 设置开发模式WithEncoding(encoding string): 设置编码格式WithDatabasePath(path string): 设置数据库路径WithRetention(days int): 设置保留天数WithBufferSize(size int): 设置缓冲区大小WithEnabled(enabled bool): 启用/禁用审计// 将日志器放入上下文
ctx := logger.WithContext(context.Background(), logger)
// 从上下文获取日志器
log := logger.FromContext(ctx)
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)
filter := &logger.AuditFilter{
UserID: "user123",
Action: "login",
StartTime: &startTime,
EndTime: &endTime,
Limit: 100,
}
entries, err := audit.Query(filter)
运行测试:
go test -v ./service/common/logger
遵循项目许可证。