「容器管理系统」 3. 初始化配置和日志监控

回顾

  • 「容器管理系统」 1. 开篇:框架选型和环境搭建

在第一篇开篇文章中,咱们已经选用了Gin框架和Docker的版本,这一节咱们需要初始化一些基础配置:

  • DB 配置
  • 日志监控
  • 配置文件 toml
  • 热重载 Air

DB 配置

链接 DB 库咱们使用的是 xorm 的官方包最新版本 v1.3.3

var (
groups map[string]*xorm.Engine
once sync.Once
)
type (
cfg struct {
Host string
Port int
User string
Pass string
Name string
MaxIdleConn int
MaxOpenConn int
}
)
func Init() {
once.Do(func() {
groups = make(map[string]*xorm.Engine)
var cfgs map[string]cfg
if err := viper.UnmarshalKey("db", &cfgs); err != nil {
panic(err)
}
// 记录获取配置日志
logz.Warn(fmt.Sprintln(cfgs))
for instanceRwType, instanceCfg := range cfgs {
dsn := fmt.Sprintf(
"%s:%s@tcp(%s:%d)/%s?charset=%s",
instanceCfg.User,
instanceCfg.Pass,
instanceCfg.Host,
instanceCfg.Port,
instanceCfg.Name,
"utf8mb4")
// 创建 xorm 实例
engine, err := xorm.NewEngine(instanceRwType, dsn)
if err != nil {
panic(err)
}
// 设置最大空闲链接数
if instanceCfg.MaxIdleConn == 0 {
instanceCfg.MaxIdleConn = 5
}
// 设置最大并发链接数
engine.SetMaxIdleConns(instanceCfg.MaxIdleConn)
if instanceCfg.MaxOpenConn == 0 {
instanceCfg.MaxOpenConn = 10
}
engine.SetMaxOpenConns(instanceCfg.MaxOpenConn)
// 是否打印SQL
engine.ShowSQL(viper.GetBool("app.debug"))
engine.SetMapper(names.GonicMapper{})
groups[instanceRwType] = engine
}
})
}
// Grp 返回指定实例组实例
func Grp(name string) *xorm.Engine {
return groups[name]
}

日志监控

log 包使用的是 go-tools

这里使用到了 Gin 的全局中间件,创建一个 Logger 的一个中间件,使用 GinUse 引入全局中间件.

实现功能:

  • 获取 trace id
  • 记录时间
  • 记录请求类型
  • 记录请求参数
  • 记录响应码
// 最大内存大小
const maxMemory = 32