u
This commit is contained in:
1 parent
3420976bd6
commit
ad47e5167b
8 files changed
+184
-70
No files matched your search
@@ -4,9 +4,6 @@ import (
|
||||
"allapp-go/internal/bootstrap/boots"
|
||||
"allapp-go/internal/config"
|
||||
"allapp-go/pkg/logger"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
)
|
||||
@@ -16,7 +13,10 @@ type App struct {
|
||||
PgSql *pgxpool.Pool
|
||||
}
|
||||
|
||||
// NewApp 初始化(不阻塞)
|
||||
// ======================
|
||||
// 初始化
|
||||
// ======================
|
||||
|
||||
func NewApp() (*App, error) {
|
||||
cfg, err := config.Load()
|
||||
if err != nil {
|
||||
@@ -26,6 +26,7 @@ func NewApp() (*App, error) {
|
||||
// 日志
|
||||
boots.InitLogger(cfg)
|
||||
|
||||
// 数据库
|
||||
pgsql, err := boots.InitPgsql(cfg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -41,30 +42,10 @@ func NewApp() (*App, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Run 启动服务(阻塞)
|
||||
func (a *App) Run() error {
|
||||
app, err := boots.RunServer(a.Config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// ======================
|
||||
// 释放资源
|
||||
// ======================
|
||||
|
||||
// 监听退出信号
|
||||
quit := make(chan os.Signal, 1)
|
||||
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
<-quit
|
||||
|
||||
logger.Log.Info("shutting down server...")
|
||||
|
||||
if err := app.Shutdown(); err != nil {
|
||||
logger.Log.Error("shutdown failed")
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Close 释放资源
|
||||
func (a *App) Close() {
|
||||
if a.PgSql != nil {
|
||||
a.PgSql.Close()
|
||||
|
||||
+8
-10
@@ -1,32 +1,30 @@
|
||||
package boots
|
||||
package bootstrap
|
||||
|
||||
import (
|
||||
"allapp-go/internal/config"
|
||||
"allapp-go/internal/middleware"
|
||||
"allapp-go/internal/router"
|
||||
"allapp-go/pkg/logger"
|
||||
"fmt"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
"github.com/gofiber/fiber/v3/middleware/requestid"
|
||||
)
|
||||
|
||||
func RunServer(cfg *config.Config) (*fiber.App, error) {
|
||||
func RunServer(cfg *config.Config) error {
|
||||
app := fiber.New()
|
||||
|
||||
// ===== middleware =====
|
||||
app.Use(requestid.New())
|
||||
|
||||
// TODO: 你可以加 logger middleware / recover
|
||||
app.Use(middleware.Logger())
|
||||
|
||||
// ===== router =====
|
||||
router.Setup(app)
|
||||
|
||||
addr := fmt.Sprintf(":%d", cfg.App.Port)
|
||||
|
||||
go func() {
|
||||
if err := app.Listen(addr); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
logger.Log.Info("服务启动")
|
||||
|
||||
return app, nil
|
||||
// ❗ 关键:直接阻塞
|
||||
return app.Listen(addr)
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"allapp-go/pkg/logger"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func Logger() fiber.Handler {
|
||||
return func(c fiber.Ctx) error {
|
||||
traceID := c.RequestID()
|
||||
|
||||
logger.SetTraceID(c, traceID)
|
||||
|
||||
start := time.Now()
|
||||
|
||||
err := c.Next()
|
||||
|
||||
// ✅ 计算耗时
|
||||
cost := time.Since(start)
|
||||
|
||||
log := logger.FromCtx(c.Context())
|
||||
log.Info("HTTP 请求",
|
||||
zap.String("method", c.Method()),
|
||||
zap.String("path", c.Path()),
|
||||
zap.Int("status", c.Response().StatusCode()),
|
||||
zap.String("ip", c.IP()),
|
||||
zap.String("duration", cost.String()),
|
||||
)
|
||||
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,18 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"allapp-go/pkg/logger"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
)
|
||||
|
||||
func Setup(app *fiber.App) {
|
||||
// 健康检查
|
||||
app.Get("/ping", func(c fiber.Ctx) error {
|
||||
log := logger.FromCtx(c)
|
||||
|
||||
log.Info("测试")
|
||||
|
||||
return c.SendString("pong")
|
||||
})
|
||||
|
||||
|
||||
Reference in new issue
Block a user