This article about github.com/jackc/pgx/v5
I want to just read logs while developing.
I don't have time to think about well-organized log.
If you think so, let's use this.
1. implement tracelog.Logger
type logger struct{}
func NewLogger() tracelog.Logger {
return &logger{}
}
// you should update this logger before production
func (l *logger) Log(ctx context.Context, level tracelog.LogLevel, msg string, data map[string]any) {
logArgs := make([]any, 0, len(data))
for k, v := range data {
logArgs = append(logArgs, k, v)
}
fmt.Printf("%s %s %+v\n", level.String(), msg, data)
}
2. set it on config before connecting
config, err := pgxpool.ParseConfig(dbURL)
config.ConnConfig.Tracer = &tracelog.TraceLog{
Logger: NewLogger(), // set your logger
LogLevel: tracelog.LogLevelTrace,
}
pool, err := pgxpool.NewWithConfig(context.Background(), config)
OK! You can see logs:)
sample code
package main
import (
"context"
"fmt"
"log"
"github.com/jackc/pgx/v5/pgxpool"
"github.com/jackc/pgx/v5/tracelog"
)
type logger struct{}
func NewLogger() tracelog.Logger {
return &logger{}
}
func (l *logger) Log(ctx context.Context, level tracelog.LogLevel, msg string, data map[string]any) {
logArgs := make([]any, 0, len(data))
for k, v := range data {
logArgs = append(logArgs, k, v)
}
fmt.Printf("%s %s %+v\n", level.String(), msg, data)
}
func main() {
dbURL := "postgres://sample:password@localhost:5432/sample"
config, err := pgxpool.ParseConfig(dbURL)
if err != nil {
log.Fatalln(err)
}
config.ConnConfig.Tracer = &tracelog.TraceLog{
Logger: NewLogger(),
LogLevel: tracelog.LogLevelTrace,
}
pool, err := pgxpool.NewWithConfig(context.Background(), config)
if err != nil {
log.Fatalln(err)
}
_ = pool
}
Top comments (0)