DEV Community

LeafChage
LeafChage

Posted on

How to output log of pgx ASAP!

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)
}
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)