package mirko import ( "context" "database/sql" "database/sql/driver" "time" "github.com/gchaincl/sqlhooks" "golang.org/x/net/trace" ) type sqlHooks struct{} func (h *sqlHooks) Before(ctx context.Context, query string, args ...interface{}) (context.Context, error) { tr, ok := trace.FromContext(ctx) if ok { tr.LazyPrintf("SQL query: %s", query) tr.LazyPrintf("SQL args: %+v", args) } return context.WithValue(ctx, "begin", time.Now()), nil } func (h *sqlHooks) After(ctx context.Context, query string, args ...interface{}) (context.Context, error) { begin := ctx.Value("begin").(time.Time) tr, ok := trace.FromContext(ctx) if ok { tr.LazyPrintf("SQL took: %s", time.Since(begin).String()) } return ctx, nil } func TraceSQL(driver driver.Driver, wrapped string) { sql.Register(wrapped, sqlhooks.Wrap(driver, &sqlHooks{})) }