目录
1.准备并下载好需要的包
- xorm.io/xorm
- xorm.io/core
- go.uber.org/zap
- gopkg.in/natefinch/lumberjack.v2 用于切割zap
- github.com/lib/pq 本文使用postgresql数据库
2. 连接postgresql数据库
// 创建pg数据库连接
func newDb() (*xorm.Engine, error) {
source := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
"127.0.0.1", 5432, "postgres", "root", "postgres")
engine, err := xorm.NewEngine("postgres", source)
if err != nil {
return nil, err
}
// 连接池中最大连接数
engine.SetMaxOpenConns(100)
// 连接池中最大空闲连接数
engine.SetMaxIdleConns(10)
// 单个连接最大存活时间(单位:秒)
engine.SetConnMaxLifetime(10)
engine.ShowSQL(true)
// 输出日志 终点部分使用自定义日志记录器
engine.SetLogger(&customXormLogger{
level: xormlog.LOG_INFO,
showSQL: true,
})
return engine, nil
}
3. zap日志工具
var (
loggerMap = map[string]*zap.Logger{}
loggerMu = &sync.Mutex{}
)
// zap
func getZapLog() *zap.Logger {
loggerName := "db" // 日志文件名称
if logger, has := loggerMap[loggerName]; has {
return logger
} else {
loggerMu.Lock()
logPath := "./log"
logFile := fmt.Sprintf("%s/%s.log", logPath, loggerName)
output := zapcore.AddSync(&lumberjack.Logger{
Filename: logFile,
MaxSize: 100, // 日志文件最大容量(单位:MB),超过容量,文件会自动分割
MaxBackups: 1, // 保留的日志天数(单位:天)
MaxAge: 10, // 保留的日志文件个数,文件数量超过该值,最旧的文件会被删除
})
// 如果需要可以输出当控制台
//output = zapcore.NewMultiWriteSyncer(output, os.Stdout)
level := zapcore.DebugLevel
_ = level.Set("info") // 设置日志级别 debug info warn err

该博客主要介绍了使用Golang连接PostgreSQL数据库的相关内容。包括准备并下载所需的包,如xorm、zap等;连接数据库;使用zap日志工具;实现xorm自定义日志记录器等,还给出了完整代码及参考文档。
最低0.47元/天 解锁文章
666

被折叠的 条评论
为什么被折叠?



