init commit
This commit is contained in:
71
server/service.go
Normal file
71
server/service.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/lmittmann/tint"
|
||||
"github.com/mattn/go-colorable"
|
||||
"log/slog"
|
||||
"os"
|
||||
"proxy-server/server/orm"
|
||||
"proxy-server/server/web"
|
||||
)
|
||||
|
||||
func Start() {
|
||||
defer func() {
|
||||
err := recover()
|
||||
if err != nil {
|
||||
slog.Error("服务由于意外的 panic 导致退出", err)
|
||||
}
|
||||
}()
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
// 初始化环境变量
|
||||
err := godotenv.Load()
|
||||
if err != nil {
|
||||
slog.Debug("没有本地环境变量文件")
|
||||
}
|
||||
|
||||
// 配置日志
|
||||
writer := colorable.NewColorable(os.Stdout)
|
||||
logger := slog.New(tint.NewHandler(writer, &tint.Options{
|
||||
Level: slog.LevelDebug,
|
||||
ReplaceAttr: func(_ []string, attr slog.Attr) slog.Attr {
|
||||
err, ok := attr.Value.Any().(error)
|
||||
if !ok {
|
||||
return attr
|
||||
}
|
||||
return tint.Err(err)
|
||||
},
|
||||
}))
|
||||
slog.SetDefault(logger)
|
||||
|
||||
// 初始化公共组件
|
||||
orm.Init()
|
||||
|
||||
// 启动子服务
|
||||
goCount := 1
|
||||
errChan := make(chan error, goCount)
|
||||
ctxC, cancel := context.WithCancel(ctx)
|
||||
defer cancel()
|
||||
|
||||
go web.Start(ctxC, errChan)
|
||||
//go monitor.Start(ctxC, errChan)
|
||||
slog.Info("服务启动成功")
|
||||
|
||||
// 监听异常
|
||||
well := true
|
||||
for i := 0; i < goCount; i++ {
|
||||
err := <-errChan
|
||||
if err != nil {
|
||||
slog.Error("服务异常退出", err)
|
||||
if well { // 第一次出错时取消其他服务
|
||||
well = false
|
||||
cancel()
|
||||
}
|
||||
}
|
||||
}
|
||||
close(errChan)
|
||||
slog.Info("服务已全部退出")
|
||||
}
|
||||
Reference in New Issue
Block a user