Go 如何使用pgx记录查询?
如果我使用pgx池,我找不到如何记录sql查询的it文档。例如,我创建了如下池: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
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返回配置的副本,而不是实际配置: