1 Star 0 Fork 0

Cruvie Kang / kk_go_kit

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
server.go 1.95 KB
一键复制 编辑 原始数据 按行查看 历史
cruvie 提交于 2024-02-04 23:12 . update
package kk_http
import (
"context"
"errors"
"gitee.com/cruvie/kk_go_kit/kk_stage"
"gitee.com/cruvie/kk_go_kit/kk_time"
"github.com/gin-gonic/gin"
"io"
"log/slog"
"net/http"
"os"
"os/signal"
"syscall"
"time"
)
func KKGin(stage *kk_stage.Stage) *gin.Engine {
if !stage.DebugMode {
gin.SetMode(gin.ReleaseMode)
// 禁用控制台颜色,将日志写入文件时不需要控制台颜色。
gin.DisableConsoleColor()
// 记录到文件
timeStr := time.Now().Format(kk_time.DateTime)
logFile, err := os.Create("gin_" + timeStr + ".log")
if err != nil {
slog.Error("error create log file", "err", err)
}
gin.DefaultWriter = io.MultiWriter(logFile)
}
engine := gin.Default()
return engine
}
func ServerWithGracefulShutdown(stage *kk_stage.Stage, httpHandler http.Handler, serverAddr string) {
server := &http.Server{
Addr: serverAddr,
Handler: httpHandler,
}
// Initializing the server in a goroutine so that
// it won't block the graceful shutdown handling below
go func() {
if err := server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
slog.Error("server listen and serve error", kk_stage.NewLog(nil).Error(err).Args()...)
panic(nil)
}
}()
// Waiting for interrupt signal to gracefully shut down the server with
// a timeout of 5 seconds.
quit := make(chan os.Signal, 1)
// kill (no param) default send syscall.SIGTERM
// kill -2 is syscall.SIGINT ==> Ctrl+C
// kill -9 is syscall.SIGKILL but can't be caught, so don't need to add it
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
slog.Warn("Shutting down server...")
// The context is used to inform the server it has 5 seconds to finish
// the request it is currently handling
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
slog.Error("server shutdown error", kk_stage.NewLog(stage).Error(err).Args()...)
}
slog.Warn("Server exited!")
}
1
https://gitee.com/cruvie/kk_go_kit.git
git@gitee.com:cruvie/kk_go_kit.git
cruvie
kk_go_kit
kk_go_kit
2c2b435ab572

搜索帮助

53164aa7 5694891 3bd8fe86 5694891