全部功劳归功于@mystdeim,他在上面回答了。
复制原因:清晰地解释了导入
为什么不只是评论?:我没有50个声望
让我们开始吧
原始答案:
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
}
上述代码是可行的,但我将在这里谈论两点。
- 导入:
log
有一个令人困惑的log
导入
让我们仔细看一下
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)
首先,让我们谈谈log
包的导入。根据最后一行的假设,他正在使用logrus
因此
import (
"log"
)
如果你将logrus
更名为log
,那么这是不可能的,因为你将失去logrus
的功能。
现在,如果你使用以下命令将logrus
重命名为log
import (
log "github.com/sirupsen/logrus"
)
它将生成另一个错误:
LstdFlags not declared by package logrus (UndeclaredImportedName)
- 导入
logrusadapter
不再起作用:
import (
"github.com/jackc/pgx/log/logrusadapter"
)
目前正在工作:
import (
"github.com/jackc/pgx/v4/log/logrusadapter"
)
[嗯,看起来在2021年是v4版本,在将来导入之前,请确保检查您的版本]
- 我修改后的解决方案
您不需要将logrus
重命名,保持原样即可。
import (
"github.com/sirupsen/logrus"
"github.com/jackc/pgx/v4/pgxpool"
"github.com/jackc/pgx/v4/log/logrusadapter"
)
最后
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)
}
logrusLogger := &logrus.Logger{
Out: os.Stderr,
Formatter: new(logrus.JSONFormatter),
Hooks: make(logrus.LevelHooks),
Level: logrus.InfoLevel,
ExitFunc: os.Exit,
ReportCaller: false,
}
config.ConnConfig.Logger = logrusadapter.NewLogger(logrusLogger)
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
}
非常感谢@mystdeim帮我找到一个好的日志系统