Skip to content

Commit 04c6639

Browse files
authored
refactor(logging): 移除自定义logger并改用slog标准库 (#68)
- 删除pkg/log/log.go中的自定义Logger实现 - 在utils/utils.go中移除调试日志 - 修改test/backend/main.go和usecase/modelkit.go使用slog.Logger - 为ModelKit结构体添加logger字段并传递到相关方法
1 parent 90b952d commit 04c6639

File tree

4 files changed

+54
-46
lines changed

4 files changed

+54
-46
lines changed

pkg/log/log.go

Lines changed: 0 additions & 14 deletions
This file was deleted.

test/backend/main.go

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,28 @@ package main
33
import (
44
"fmt"
55
"net/http"
6+
"log/slog"
7+
"os"
68

79
"github.com/labstack/echo/v4/middleware"
810

911
"github.com/chaitin/ModelKit/v2/domain"
10-
"github.com/chaitin/ModelKit/v2/pkg/log"
1112
"github.com/chaitin/ModelKit/v2/usecase"
1213
"github.com/labstack/echo/v4"
1314
)
1415

15-
type ModelKit struct{}
16+
type ModelKit struct{
17+
logger *slog.Logger
18+
}
1619

1720
func NewModelKit(
1821
echo *echo.Echo,
19-
logger *log.Logger,
22+
logger *slog.Logger,
2023
isApmEnabled bool,
2124
) *ModelKit {
22-
m := &ModelKit{}
25+
m := &ModelKit{
26+
logger: logger,
27+
}
2328

2429
// 注册路由
2530
g := echo.Group("/api/v1/modelkit")
@@ -39,7 +44,8 @@ func (p *ModelKit) GetModelList(c echo.Context) error {
3944
})
4045
}
4146

42-
resp, err := usecase.ModelList(c.Request().Context(), &req)
47+
48+
resp, err := usecase.ModelList(c.Request().Context(), &req, p.logger)
4349
if err != nil {
4450
fmt.Println("err:", err)
4551
return c.JSON(http.StatusOK, domain.Response{
@@ -65,7 +71,7 @@ func (p *ModelKit) CheckModel(c echo.Context) error {
6571
})
6672
}
6773

68-
resp, err := usecase.CheckModel(c.Request().Context(), &req)
74+
resp, err := usecase.CheckModel(c.Request().Context(), &req, p.logger)
6975
if err != nil {
7076
fmt.Println("err:", err)
7177
return c.JSON(http.StatusOK, domain.Response{
@@ -100,10 +106,16 @@ func (p *ModelKit) CheckModel(c echo.Context) error {
100106
func main() {
101107
echo := echo.New()
102108

109+
// 创建logger
110+
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
111+
AddSource: true,
112+
Level: slog.LevelInfo,
113+
}))
114+
103115
// 添加CORS中间件
104116
echo.Use(middleware.CORS())
105117

106-
NewModelKit(echo, nil, false)
118+
NewModelKit(echo, logger, false)
107119

108120
err := echo.Start(":8080")
109121
if err != nil {

usecase/modelkit.go

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"encoding/json"
77
"fmt"
88
"io"
9+
"log/slog"
910
"log"
1011
"maps"
1112
"net/http"
@@ -33,8 +34,12 @@ import (
3334
"github.com/chaitin/ModelKit/v2/utils"
3435
)
3536

36-
func ModelList(ctx context.Context, req *domain.ModelListReq) (*domain.ModelListResp, error) {
37-
log.Printf("ModelList req: provider=%s, baseURL=%s", req.Provider, req.BaseURL)
37+
func ModelList(ctx context.Context, req *domain.ModelListReq, logger *slog.Logger) (*domain.ModelListResp, error) {
38+
if logger != nil {
39+
logger.Info("ModelList req: provider=%s, baseURL=%s", req.Provider, req.BaseURL)
40+
} else {
41+
log.Printf("ModelList req: provider=%s, baseURL=%s", req.Provider, req.BaseURL)
42+
}
3843
httpClient := &http.Client{
3944
Timeout: time.Second * 30,
4045
Transport: &http.Transport{
@@ -64,7 +69,11 @@ func ModelList(ctx context.Context, req *domain.ModelListReq) (*domain.ModelList
6469
}
6570
defer func() {
6671
if closeErr := client.Close(); closeErr != nil {
67-
log.Printf("Failed to close gemini client: %v", closeErr)
72+
if logger != nil {
73+
logger.Error("Failed to close gemini client: %v", slog.Any("error", closeErr))
74+
} else {
75+
log.Printf("Failed to close gemini client: %v", closeErr)
76+
}
6877
}
6978
}()
7079

@@ -168,8 +177,12 @@ func ModelList(ctx context.Context, req *domain.ModelListReq) (*domain.ModelList
168177
}
169178
}
170179

171-
func CheckModel(ctx context.Context, req *domain.CheckModelReq) (*domain.CheckModelResp, error) {
172-
log.Printf("CheckModel req: provider=%s, model=%s, baseURL=%s", req.Provider, req.Model, req.BaseURL)
180+
func CheckModel(ctx context.Context, req *domain.CheckModelReq, logger *slog.Logger) (*domain.CheckModelResp, error) {
181+
if logger != nil {
182+
logger.Info("CheckModel req", "provider", req.Provider, "model", req.Model, "baseURL", req.BaseURL)
183+
} else {
184+
log.Printf("CheckModel req: provider=%s, model=%s, baseURL=%s", req.Provider, req.Model, req.BaseURL)
185+
}
173186
checkResp := &domain.CheckModelResp{}
174187
modelType := consts.ParseModelType(req.Type)
175188

@@ -218,7 +231,11 @@ func CheckModel(ctx context.Context, req *domain.CheckModelReq) (*domain.CheckMo
218231
}
219232
defer func() {
220233
if closeErr := resp.Body.Close(); closeErr != nil {
221-
log.Printf("Failed to close resp body: %v", closeErr)
234+
if logger != nil {
235+
logger.Error("Failed to close resp body: %v", slog.Any("error", closeErr))
236+
} else {
237+
log.Printf("Failed to close resp body: %v", closeErr)
238+
}
222239
}
223240
}()
224241
if resp.StatusCode != http.StatusOK {
@@ -230,7 +247,7 @@ func CheckModel(ctx context.Context, req *domain.CheckModelReq) (*domain.CheckMo
230247
// end
231248
provider := consts.ParseModelProvider(req.Provider)
232249

233-
resp, err := getChatModelGenerateChat(ctx, provider, modelType, req.BaseURL, req)
250+
resp, err := getChatModelGenerateChat(ctx, provider, modelType, req.BaseURL, req, nil)
234251
// 可编辑url的供应商,尝试修复baseURL
235252
if err != nil && (provider == consts.ModelProviderOther || provider == consts.ModelProviderOllama || provider == consts.ModelProviderAzureOpenAI) {
236253
msg := generateBaseURLFixSuggestion(err.Error(), req.BaseURL, provider)
@@ -379,7 +396,7 @@ func ollamaListModel(baseURL string, httpClient *http.Client, apiHeader string)
379396
return request.Get[domain.ModelListResp](client, u.Path, request.WithHeader(h))
380397
}
381398

382-
func getChatModelGenerateChat(ctx context.Context, provider consts.ModelProvider, modelType consts.ModelType, baseURL string, req *domain.CheckModelReq) (string, error) {
399+
func getChatModelGenerateChat(ctx context.Context, provider consts.ModelProvider, modelType consts.ModelType, baseURL string, req *domain.CheckModelReq, logger *log.Logger) (string, error) {
383400
chatModel, err := GetChatModel(ctx, &domain.ModelMetadata{
384401
Provider: provider,
385402
ModelName: req.Model,
@@ -399,10 +416,18 @@ func getChatModelGenerateChat(ctx context.Context, provider consts.ModelProvider
399416
})
400417
// 非流式生成失败,尝试流式生成
401418
if err != nil || genResp.Content == "" {
402-
log.Printf("Generate chat failed, err: %v", err)
419+
if logger != nil {
420+
logger.Printf("Generate chat failed, err: %v", err)
421+
} else {
422+
log.Printf("Generate chat failed, err: %v", err)
423+
}
403424
streamRes, streamErr := streamCheck(ctx, &chatModel)
404425
if streamErr != nil {
405-
log.Printf("Stream chat failed, err: %v", streamErr)
426+
if logger != nil {
427+
logger.Printf("Stream chat failed, err: %v", streamErr)
428+
} else {
429+
log.Printf("Stream chat failed, err: %v", streamErr)
430+
}
406431
return "", err
407432
}
408433
return streamRes, nil
@@ -435,19 +460,6 @@ func streamCheck(ctx context.Context, chatModel *model.BaseChatModel) (string, e
435460
return res, nil
436461
}
437462

438-
// baseURL添加/v1
439-
func baseURLAddV1(inputURL string) (string, error) {
440-
rawURL, err := url.Parse(inputURL)
441-
if err != nil {
442-
return "", err
443-
}
444-
// 没有path, 则添加/v1
445-
if rawURL.Path == "" {
446-
rawURL.Path = "/v1"
447-
}
448-
return rawURL.String(), nil
449-
}
450-
451463
// baseURL的host换成host.docker.internal
452464
func baseURLReplaceHost(inputURL string) (string, error) {
453465
rawURL, err := url.Parse(inputURL)

utils/utils.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,6 @@ func GetHttpClientWithAPIHeaderMap(header string) *http.Client {
298298
}
299299

300300
func GetQuery(req *domain.ModelListReq) (request.Query, error) {
301-
log.Println("req is: ", req)
302301
q := make(request.Query, 0)
303302
provider := consts.ParseModelProvider(req.Provider)
304303
modelType := consts.ParseModelType(req.Type)
@@ -317,6 +316,5 @@ func GetQuery(req *domain.ModelListReq) (request.Query, error) {
317316
if provider == consts.ModelProviderSiliconFlow && modelType == consts.ModelTypeCoder {
318317
q["sub_type"] = "chat"
319318
}
320-
log.Println("query ", q)
321319
return q, nil
322320
}

0 commit comments

Comments
 (0)