package main import ( "fmt" nested "github.com/antonfisher/nested-logrus-formatter" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/accesslog" "github.com/kataras/iris/v12/websocket" "github.com/sirupsen/logrus" "main/config" "main/crontab" "main/database" "main/jwtSet" "main/service" "main/service/admin" "main/service/ws" "main/utils" "os" "path" "time" ) func main() { logrus.SetFormatter(&nested.Formatter{HideKeys: true, TimestampFormat: time.RFC3339}) //配置文件初始化 err := config.InitConfig(utils.GetEnvDefault("version", "dev")) if err != nil { logrus.Errorln("配置文件初始化失败:", err) return } logrus.Infoln("配置文件初始化完成") //日志初始化 ac := makeAccessLog() //应用初始化 app := iris.New() //应用ac-log app.UseRouter(ac.Handler) //错误处理 app.OnAnyErrorCode(handler) //数据库连接初始化 if !database.GetInstance().InitDataPool() { return } logrus.Infoln("数据库连接初始化完成") if e := database.UpdateDbStruct(); e != nil { logrus.Errorln("数据库初始化失败:", e) return } //初始化用户信息,系统配置信息,菜单列表,本地IP地址信息 utils.UpdateUserInfo() utils.UpdateSysSettings() utils.UpdateMenuList() admin.UpdateLocalIpList() logrus.Infoln("数据库结构初始化完成") jwtSet.Init() logrus.Infoln("jwt认证初始化完成") crontab.InitAllCron() id, err := crontab.MyCron.AddFunc("0 0 0 * * *", func() { utils.UpdateUserInfo() jwtSet.GetJwtKeys() }) if err != nil { logrus.Errorln("cron任务添加失败:", err) return } crontab.UpdateCronDb(int(id), "每天初始化jwt密钥", true) if utils.GetEnvDefault("version", "dev") == "prd" { //id, err = crontab.MyCron.AddFunc("0 10 * * * *", func() { // crontab.UpdateSysInfo("") //}) //crontab.UpdateCronDb(int(id), "每小时10分同步历史系统信息记录", true) id, err = crontab.MyCron.AddFunc("0 30 0 * * *", func() { crontab.CornSaveNginxLog() }) crontab.UpdateCronDb(int(id), "每天00:30同步nginx日志", true) } logrus.Infoln("定时任务初始化完成") //接口组 app.PartyFunc("/api", service.Apis) app.PartyFunc("/admin", service.Admin) app.PartyFunc("/test", service.Test) logrus.Infoln("接口组配置完成") //启动websocket wss := ws.SetupWebsocket() app.Get("/ws", websocket.Handler(wss)) logrus.Infoln("websocket配置完成") //应用启动 logrus.Infoln("应用启动") err = app.Run(iris.Addr(":8080")) if err != nil { return } } // 生成acLog实例 func makeAccessLog() *accesslog.AccessLog { cPath, _ := os.Getwd() ac := accesslog.File(path.Join(cPath, config.Config.Logs.Log, fmt.Sprintf("access-%s.log", time.Now().Format("2006-01-02")))) ac.AddOutput(os.Stdout) ac.IP = true ac.Delim = ' ' ac.ResponseBody = false return ac } // 接口错误处理 func handler(ctx iris.Context) { if ctx.GetErr() != nil { err := ctx.JSON(utils.FormatRes(ctx.GetStatusCode(), ctx.GetErr().Error(), nil)) if err != nil { return } } else { err := ctx.JSON(utils.FormatRes(ctx.GetStatusCode(), "", nil)) if err != nil { return } } }