diff options
author | René 'Necoro' Neumann <necoro@necoro.eu> | 2024-02-13 20:43:03 +0100 |
---|---|---|
committer | René 'Necoro' Neumann <necoro@necoro.eu> | 2024-02-13 20:43:03 +0100 |
commit | 18ed79e026aa301ffed60ab86f6df7adca981ccb (patch) | |
tree | 47e0ae8b266e7b743fb64524bfccc149219831c2 /sqlite.go | |
parent | a9420a2a4f3221d1771e7f28786ccdd80ceed88d (diff) | |
download | gosten-18ed79e026aa301ffed60ab86f6df7adca981ccb.tar.gz gosten-18ed79e026aa301ffed60ab86f6df7adca981ccb.tar.bz2 gosten-18ed79e026aa301ffed60ab86f6df7adca981ccb.zip |
SQL logging
Diffstat (limited to 'sqlite.go')
-rw-r--r-- | sqlite.go | 44 |
1 files changed, 41 insertions, 3 deletions
@@ -1,9 +1,47 @@ -//go:build sqlite && !windows +//go:build sqlite package main import ( - _ "github.com/mattn/go-sqlite3" + "context" + "database/sql" + "log" + "log/slog" + + sqldblogger "github.com/simukti/sqldb-logger" ) -const driverName = "sqlite3" +type logger struct { +} + +func (l logger) Log(ctx context.Context, level sqldblogger.Level, msg string, data map[string]interface{}) { + attrs := make([]slog.Attr, 0, len(data)) + + for k, v := range data { + attrs = append(attrs, slog.Any(k, v)) + } + + var lvl slog.Level + switch level { + case sqldblogger.LevelDebug, sqldblogger.LevelTrace: + lvl = slog.LevelDebug + case sqldblogger.LevelInfo: + lvl = slog.LevelInfo + case sqldblogger.LevelError: + lvl = slog.LevelError + } + + slog.LogAttrs(ctx, lvl, msg, attrs...) +} + +func openDB(_ string) *sql.DB { + dsn := "test.sqlite" + db, err := sql.Open(driverName, dsn) + if err != nil { + log.Fatal(err) + } + slog.SetLogLoggerLevel(slog.LevelDebug) + return sqldblogger.OpenDriver(dsn, db.Driver(), logger{}, + sqldblogger.WithSQLQueryAsMessage(false), + sqldblogger.WithMinimumLevel(sqldblogger.LevelTrace)) +} |