「容器管理系统」 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
的一个中间件,使用 Gin
的 Use
引入全局中间件.
实现功能:
- 获取
trace id
- 记录时间
- 记录请求类型
- 记录请求参数
- 记录响应码
// 最大内存大小 const maxMemory = 32