feat(conga,lagoon): River and GORM log through diary components
- River's logger is diary.For("river") (warn by default), conga's own lines diary.For("conga"); an app-published logger still wins
- GORM logs through logger.NewSlogLogger(diary.For("db")): warn level, record-not-found ignored, parameterized SQL traces only at verbosity 3
- Smoke tests TestRiverLoggerUsesDiarySmoke and TestGormLoggerUsesDiarySmoke
This commit is contained in:
@@ -5,12 +5,15 @@ import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.golem15.com/golem15/summercms/modules/backpack"
|
||||
"git.golem15.com/golem15/summercms/modules/compass"
|
||||
"git.golem15.com/golem15/summercms/modules/diary"
|
||||
_ "github.com/jackc/pgx/v5/stdlib"
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
// Open pings dsn through pgx stdlib and returns that exact *sql.DB plus a
|
||||
@@ -53,8 +56,26 @@ func Use(ctx context.Context, sqlDB *sql.DB) (*gorm.DB, error) {
|
||||
return gormFromSQL(sqlDB)
|
||||
}
|
||||
|
||||
// gormLogger routes GORM's lines through diary as component db instead of
|
||||
// GORM's default stdout logger: slow queries (over 200ms) and errors at warn,
|
||||
// record-not-found ignored, and SQL traces only at verbosity 3 (-vvv), with
|
||||
// parameterized queries so bound values never reach a log line.
|
||||
func gormLogger() logger.Interface {
|
||||
level := logger.Warn
|
||||
if diary.Verbosity() >= 3 {
|
||||
level = logger.Info
|
||||
}
|
||||
return logger.NewSlogLogger(diary.For("db"), logger.Config{
|
||||
SlowThreshold: 200 * time.Millisecond,
|
||||
LogLevel: level,
|
||||
IgnoreRecordNotFoundError: true,
|
||||
// Log SQL with placeholders, never with the bound values.
|
||||
ParameterizedQueries: true,
|
||||
})
|
||||
}
|
||||
|
||||
func gormFromSQL(sqlDB *sql.DB) (*gorm.DB, error) {
|
||||
gdb, err := gorm.Open(postgres.New(postgres.Config{Conn: sqlDB}), &gorm.Config{})
|
||||
gdb, err := gorm.Open(postgres.New(postgres.Config{Conn: sqlDB}), &gorm.Config{Logger: gormLogger()})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("lagoon: gorm open: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user