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

2023年 9月 24日 91.3k 0

回顾

  • 「容器管理系统」 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

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论