diff --git a/code/base-project/base-go-v3/biz/handler/auth/login_service.go b/code/base-project/base-go-v3/biz/handler/auth/login_service.go index d6c6fdc9..4e02a0bb 100644 --- a/code/base-project/base-go-v3/biz/handler/auth/login_service.go +++ b/code/base-project/base-go-v3/biz/handler/auth/login_service.go @@ -3,17 +3,16 @@ package auth import ( + auth "cn/oneao/base-go/biz/model/auth" "cn/oneao/base-go/db" "cn/oneao/base-go/ent/userinfo" + "cn/oneao/base-go/logx" "cn/oneao/base-go/utils/jwtx" "cn/oneao/base-go/utils/response" - "cn/oneao/base-go/utils/routinex" "context" - "github.com/cloudwego/hertz/pkg/common/hlog" + "fmt" "time" - auth "cn/oneao/base-go/biz/model/auth" - "github.com/cloudwego/hertz/pkg/app" "github.com/cloudwego/hertz/pkg/protocol/consts" ) @@ -28,6 +27,7 @@ func LoginDefault(ctx context.Context, c *app.RequestContext) { c.String(consts.StatusBadRequest, err.Error()) return } + start := time.Now() // 记录开始时间 // 查询登录用户 loginUser, err := db.Client.UserInfo. @@ -35,23 +35,27 @@ func LoginDefault(ctx context.Context, c *app.RequestContext) { Where(userinfo.AccountEQ(req.Account), userinfo.PasswordEQ(req.Password)). Only(ctx) + duration := time.Since(start) // 计算耗时 + fmt.Println("耗时:", duration) if err != nil { response.Fail(c).Message("账号或密码错误").Send() return } // 异步更新登录事件 - routinex.Go(func() { + go func() { err := db.Client.UserInfo. Update(). SetLastLoginTime(time.Now()). Where(userinfo.IDEQ(loginUser.ID)). Exec(ctx) + + logx.CtxInfo(ctx, "测试测试") if err != nil { - hlog.Errorf("更新用户登录时间失败,UserID=%d, err=%v", loginUser.ID, err) + logx.CtxError(ctx, "更新用户登录时间失败,UserID=%d, err=%v", loginUser.ID, err) } - }) + }() // 包装数据 token, err := jwtx.CreateAccessToken(loginUser.ID) diff --git a/code/base-project/base-go-v3/biz/router/middleware/error.go b/code/base-project/base-go-v3/biz/router/middleware/error.go index e4fe505f..8c71c82c 100644 --- a/code/base-project/base-go-v3/biz/router/middleware/error.go +++ b/code/base-project/base-go-v3/biz/router/middleware/error.go @@ -12,8 +12,6 @@ func Error() app.HandlerFunc { c.Next(ctx) if err := c.Errors.Last(); err != nil { - // 未知错误 -> 500 - //c.JSON(500, ErrorResponse{500, "Internal Server Error"}) } } } diff --git a/code/base-project/base-go-v3/biz/router/middleware/log.go b/code/base-project/base-go-v3/biz/router/middleware/log.go index 4621b2cc..d9cb9cad 100644 --- a/code/base-project/base-go-v3/biz/router/middleware/log.go +++ b/code/base-project/base-go-v3/biz/router/middleware/log.go @@ -1,17 +1,21 @@ package middleware import ( + "cn/oneao/base-go/logx" "context" "time" "github.com/cloudwego/hertz/pkg/app" - "github.com/cloudwego/hertz/pkg/common/hlog" "github.com/hertz-contrib/requestid" "go.uber.org/zap" ) func Log() app.HandlerFunc { return func(c context.Context, ctx *app.RequestContext) { + reqId := requestid.Get(ctx) + + c = context.WithValue(c, "RequestID", reqId) + start := time.Now() // 记录开始时间 // 执行后续处理 @@ -20,8 +24,7 @@ func Log() app.HandlerFunc { // 计算耗时 duration := time.Since(start).Milliseconds() - hlog.Info("请求完成", - zap.String("RequestID", requestid.Get(ctx)), + logx.CtxInfo(c, "请求完成", zap.String("IP", ctx.ClientIP()), zap.String("Method", string(ctx.Method())), zap.String("Path", string(ctx.Path())), diff --git a/code/base-project/base-go-v3/go.mod b/code/base-project/base-go-v3/go.mod index 1e8c377f..f6560b09 100644 --- a/code/base-project/base-go-v3/go.mod +++ b/code/base-project/base-go-v3/go.mod @@ -16,6 +16,7 @@ require ( require ( ariga.io/atlas v0.38.0 // indirect + filippo.io/edwards25519 v1.1.0 // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect github.com/bmatcuk/doublestar v1.3.4 // indirect @@ -28,6 +29,7 @@ require ( github.com/elastic/pkcs8 v1.0.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/go-openapi/inflect v0.21.3 // indirect + github.com/go-sql-driver/mysql v1.9.3 // indirect github.com/goccy/go-json v0.10.5 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/go-cmp v0.7.0 // indirect diff --git a/code/base-project/base-go-v3/go.sum b/code/base-project/base-go-v3/go.sum index 629388a7..30b8aa05 100644 --- a/code/base-project/base-go-v3/go.sum +++ b/code/base-project/base-go-v3/go.sum @@ -2,6 +2,7 @@ ariga.io/atlas v0.38.0 h1:MwbtwVtDWJFq+ECyeTAz2ArvewDnpeiw/t/sgNdDsdo= ariga.io/atlas v0.38.0/go.mod h1:D7XMK6ei3GvfDqvzk+2VId78j77LdqHrqPOWamn51/s= entgo.io/ent v0.14.5 h1:Rj2WOYJtCkWyFo6a+5wB3EfBRP0rnx1fMk6gGA0UUe4= entgo.io/ent v0.14.5/go.mod h1:zTzLmWtPvGpmSwtkaayM2cm5m819NdM7z7tYPq3vN0U= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= @@ -47,6 +48,8 @@ github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8 github.com/go-openapi/inflect v0.21.3 h1:TmQvw+9eLrsNp4X0BBQacEZZtAnzk2z1FaLdQQJsDiU= github.com/go-openapi/inflect v0.21.3/go.mod h1:INezMuUu7SJQc2AyR3WO0DqqYUJSj8Kb4hBd7WtjlAw= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= +github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= diff --git a/code/base-project/base-go-v3/idl/auth/register.proto b/code/base-project/base-go-v3/idl/auth/register.proto new file mode 100644 index 00000000..8832b06d --- /dev/null +++ b/code/base-project/base-go-v3/idl/auth/register.proto @@ -0,0 +1 @@ +package auth diff --git a/code/base-project/base-go-v3/logx/field.go b/code/base-project/base-go-v3/logx/field.go new file mode 100644 index 00000000..5b910b7c --- /dev/null +++ b/code/base-project/base-go-v3/logx/field.go @@ -0,0 +1,59 @@ +package logx + +import ( + "context" + + "github.com/cloudwego/hertz/pkg/common/hlog" + "go.uber.org/zap" +) + +// getRequestID 从 context 中取 RequestID,如果没有则返回空字符串 +func getRequestID(ctx context.Context) string { + if ctx == nil { + return "" + } + if rid, ok := ctx.Value("RequestID").(string); ok { + return rid + } + return "" +} + +func CtxInfo(ctx context.Context, v ...interface{}) { + rid := getRequestID(ctx) + if rid != "" { + v = append(v, zap.String("RequestID", rid)) + } + hlog.Info(v...) +} + +func CtxError(ctx context.Context, v ...interface{}) { + rid := getRequestID(ctx) + if rid != "" { + v = append(v, zap.String("RequestID", rid)) + } + hlog.Error(v...) +} + +func CtxWarn(ctx context.Context, v ...interface{}) { + rid := getRequestID(ctx) + if rid != "" { + v = append(v, zap.String("RequestID", rid)) + } + hlog.Warn(v...) +} + +func CtxDebug(ctx context.Context, v ...interface{}) { + rid := getRequestID(ctx) + if rid != "" { + v = append(v, zap.String("RequestID", rid)) + } + hlog.Debug(v...) +} + +func CtxFatal(ctx context.Context, v ...interface{}) { + rid := getRequestID(ctx) + if rid != "" { + v = append(v, zap.String("RequestID", rid)) + } + hlog.Fatal(v...) +} diff --git a/code/base-project/base-go-v3/log/log.go b/code/base-project/base-go-v3/logx/log.go similarity index 90% rename from code/base-project/base-go-v3/log/log.go rename to code/base-project/base-go-v3/logx/log.go index cb5b5b73..ca415573 100644 --- a/code/base-project/base-go-v3/log/log.go +++ b/code/base-project/base-go-v3/logx/log.go @@ -1,4 +1,4 @@ -package log +package logx import ( "fmt" @@ -12,6 +12,11 @@ import ( "gopkg.in/natefinch/lumberjack.v2" ) +var ( + // 暴露底层 zap logger 供 logreq 使用 + zapLogger *zap.Logger +) + func InitLog() { dynamicLevel := zap.NewAtomicLevel() @@ -54,9 +59,10 @@ func InitLog() { }, }...), ) - defer logger.Sync() hlog.SetLogger(logger) + + zapLogger = logger.Logger() } // humanEncoderConfig copy from zap @@ -103,3 +109,12 @@ func getWriteSyncer(basePath string) zapcore.WriteSyncer { } return currentSync[basePath] } +func Sync() error { + if zapLogger != nil { + return zapLogger.Sync() + } + return nil +} +func GetZapLogger() *zap.Logger { + return zapLogger +} diff --git a/code/base-project/base-go-v3/log/logger.go b/code/base-project/base-go-v3/logx/logger.go similarity index 99% rename from code/base-project/base-go-v3/log/logger.go rename to code/base-project/base-go-v3/logx/logger.go index 29e14215..b68e1964 100644 --- a/code/base-project/base-go-v3/log/logger.go +++ b/code/base-project/base-go-v3/logx/logger.go @@ -1,4 +1,4 @@ -package log +package logx import ( "context" diff --git a/code/base-project/base-go-v3/log/option.go b/code/base-project/base-go-v3/logx/option.go similarity index 99% rename from code/base-project/base-go-v3/log/option.go rename to code/base-project/base-go-v3/logx/option.go index a41da660..890783fc 100644 --- a/code/base-project/base-go-v3/log/option.go +++ b/code/base-project/base-go-v3/logx/option.go @@ -1,4 +1,4 @@ -package log +package logx import ( "os" diff --git a/code/base-project/base-go-v3/log/utils.go b/code/base-project/base-go-v3/logx/utils.go similarity index 98% rename from code/base-project/base-go-v3/log/utils.go rename to code/base-project/base-go-v3/logx/utils.go index 2c439e81..1ea6424f 100644 --- a/code/base-project/base-go-v3/log/utils.go +++ b/code/base-project/base-go-v3/logx/utils.go @@ -1,4 +1,4 @@ -package log +package logx import ( "github.com/cloudwego/hertz/pkg/common/hlog" diff --git a/code/base-project/base-go-v3/main.go b/code/base-project/base-go-v3/main.go index 61235d72..feca42a5 100644 --- a/code/base-project/base-go-v3/main.go +++ b/code/base-project/base-go-v3/main.go @@ -4,7 +4,7 @@ import ( "cn/oneao/base-go/biz/router/middleware" "cn/oneao/base-go/config" "cn/oneao/base-go/db" - "cn/oneao/base-go/log" + "cn/oneao/base-go/logx" "cn/oneao/base-go/utils/idgen" "github.com/cloudwego/hertz/pkg/app/server" @@ -19,7 +19,7 @@ func main() { // 初始化数据库 db.InitDB() // 日志 - log.InitLog() + logx.InitLog() h := server.Default( server.WithBasePath(config.App.Server.BaseUrl),