Go Audit
Automatic audit trail and API call logging for Go applications.
Go Audit provides automatic audit trail and API call logging for Go applications. Register a plugin with your ORM, and every create, update, and delete is captured — who changed what, when, and from what value to what value.
The core package has zero network dependencies and relies only on the Go standard library. ORM integrations ship as separate sub-packages so you only import what you use.
Key Features
- ORM Auto-Hooks — GORM, Bun, Ent (zero manual code)
- Auto Diff — on updates, only changed fields are stored
- API Call Logging — track third-party HTTP calls with redaction
- Multi-Database — PostgreSQL, MySQL, SQLite
- Transaction Correlation — link data changes + API calls by ID
- Query Builder — typed filters for entity, user, action, range
- Snapshot & Restore — reconstruct entity state at any point in time
- Retention —
Purgerows older than a cutoff
Quick Navigation
- Getting Started — install and set up your first audit trail
- Features — explore every capability
- Adapters — ORM integrations (GORM, Bun, Ent)
- API Reference — full API surface
- Examples — runnable end-to-end samples
Install
go get github.com/gopackx/go-auditMinimal Example
import (
"context"
"database/sql"
"github.com/gopackx/go-audit"
auditgorm "github.com/gopackx/go-audit/adapters/gorm"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
gormDB, _ := gorm.Open(postgres.Open(dsn), &gorm.Config{})
sqlDB, _ := gormDB.DB()
auditor, err := audit.New(sqlDB, audit.Config{
Dialect: audit.PostgreSQL,
UserFunc: func(ctx context.Context) (string, string) {
return "user-123", "user"
},
DataAudit: audit.DataAuditConfig{Enabled: true},
})
if err != nil {
panic(err)
}
_ = gormDB.Use(auditgorm.Plugin(auditor))
_ = auditor.AutoMigrate(context.Background())That's it. Every create, update, and delete through GORM is now tracked
in the audit_logs table automatically.