Go 如何使用pgx记录查询?

Go 如何使用pgx记录查询?,go,pgx,Go,Pgx,如果我使用pgx池,我找不到如何记录sql查询的it文档。例如,我创建了如下池: func DB() *pgxpool.Pool { connStr := os.Getenv("DATABASE_URL") conn, err := pgxpool.Connect(context.Background(), connStr) if err != nil { fmt.Fprintf(os.Stderr, "Unable to c

如果我使用pgx池,我找不到如何记录sql查询的it文档。例如,我创建了如下池:

func DB() *pgxpool.Pool {
    connStr := os.Getenv("DATABASE_URL")
    conn, err := pgxpool.Connect(context.Background(), connStr)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
        os.Exit(1)
    }
    return conn
}

那么请告诉我如何记录查询?

只需在连接的ConnConfig属性中设置记录器:

conn, err := pgxpool.Connect(context.Background(), connStr)
if err != nil {
    fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
    os.Exit(1)
}
conn.Config().Logger = myLogger
根据您使用的记录器,例如,有一组适配器

然后在记录器中,只需使用sql键记录内容:

func (m *myLogger) Log(ctx context.Context, level pgx.LogLevel, msg string, data map[string]interface{}) {
    if sql, ok := data["sql"]; ok {
        m.Log("Executing SQL: %s", sql)
    }
}

只需在连接的ConnConfig属性中设置记录器:

conn, err := pgxpool.Connect(context.Background(), connStr)
if err != nil {
    fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
    os.Exit(1)
}
conn.Config().Logger = myLogger
根据您使用的记录器,例如,有一组适配器

然后在记录器中,只需使用sql键记录内容:

func (m *myLogger) Log(ctx context.Context, level pgx.LogLevel, msg string, data map[string]interface{}) {
    if sql, ok := data["sql"]; ok {
        m.Log("Executing SQL: %s", sql)
    }
}

我最终得到了以下解决方案:

func DB() *pgxpool.Pool {
    config, err := pgxpool.ParseConfig(connStr)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Unable to parse config: %v\n", err)
        os.Exit(1)
    }
    looger := &log.Logger{
        Out:          os.Stderr,
        Formatter:    new(log.JSONFormatter),
        Hooks:        make(log.LevelHooks),
        Level:        log.InfoLevel,
        ExitFunc:     os.Exit,
        ReportCaller: false,
    }
    config.ConnConfig.Logger = logrusadapter.NewLogger(looger)
    conn, err := pgxpool.ConnectConfig(context.Background(), config)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
        os.Exit(1)
    }
    return conn
}

我最终得到了以下解决方案:

func DB() *pgxpool.Pool {
    config, err := pgxpool.ParseConfig(connStr)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Unable to parse config: %v\n", err)
        os.Exit(1)
    }
    looger := &log.Logger{
        Out:          os.Stderr,
        Formatter:    new(log.JSONFormatter),
        Hooks:        make(log.LevelHooks),
        Level:        log.InfoLevel,
        ExitFunc:     os.Exit,
        ReportCaller: false,
    }
    config.ConnConfig.Logger = logrusadapter.NewLogger(looger)
    conn, err := pgxpool.ConnectConfig(context.Background(), config)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
        os.Exit(1)
    }
    return conn
}

与记录其他内容的方式相同:通过调用日志方法。看起来你在这么做。您试图解决的问题是什么?与您记录任何其他内容的方式相同:通过调用日志方法。看起来你在这么做。您试图解决的问题是什么?conn.Config返回配置的副本,而不是实际配置:conn.Config返回配置的副本,而不是实际配置: