update: X-Trace-Id

This commit is contained in:
loveuer
2024-07-17 23:05:23 +08:00
parent 116d5b13f8
commit 459e3d9c09
10 changed files with 60 additions and 68 deletions

View File

@ -2,7 +2,9 @@ package api
import (
"context"
"fmt"
"github.com/loveuer/nf"
"github.com/loveuer/nf/nft/resp"
"time"
"ultone/internal/handler"
"ultone/internal/middleware/auth"
@ -21,9 +23,13 @@ func initApp(ctx context.Context) *nf.App {
// todo: add project prefix, if you need
// for example: app := engine.Group("/api/{project}")
app := engine.Group("/api")
app.Get("/available", func(c *nf.Ctx) error {
return c.JSON(nf.Map{"status": 200, "ok": true, "time": time.Now()})
})
app.Get("/available", func() nf.HandlerFunc {
start := time.Now()
return func(c *nf.Ctx) error {
now := time.Now()
return resp.Resp200(c, nf.Map{"ok": true, "start": start, "now": now, "duration": fmt.Sprint(now.Sub(start))})
}
}())
{
api := app.Group("/user")

View File

@ -41,12 +41,12 @@ func (u uc) GetUser(c *nf.Ctx, id uint64) (*model.User, error) {
if opt.EnableUserCache {
if bs, err = cache.Client.Get(tool.Timeout(3), key); err != nil {
log.Warn(c, "controller.GetUser: get user by cache key=%s err=%v", key, err)
log.Warn(c.Context(), "controller.GetUser: get user by cache key=%s err=%v", key, err)
goto ByDB
}
if err = json.Unmarshal(bs, target); err != nil {
log.Warn(c, "controller.GetUser: json unmarshal key=%s by=%s err=%v", key, string(bs), err)
log.Warn(c.Context(), "controller.GetUser: json unmarshal key=%s by=%s err=%v", key, string(bs), err)
goto ByDB
}
@ -69,7 +69,7 @@ ByDB:
if opt.EnableUserCache {
if err = u.CacheUser(c, target); err != nil {
log.Warn(c, "controller.GetUser: cache user key=%s err=%v", key, err)
log.Warn(c.Context(), "controller.GetUser: cache user key=%s err=%v", key, err)
}
}
@ -88,7 +88,7 @@ func (u uc) GetUserByToken(c *nf.Ctx, token string) (*model.User, error) {
return nil, err
}
log.Debug(c, "controller.GetUserByToken: key=%s cache bytes=%s", key, string(bs))
log.Debug(c.Context(), "controller.GetUserByToken: key=%s cache bytes=%s", key, string(bs))
userId := cast.ToUint64(string(bs))
if userId == 0 {
@ -146,7 +146,7 @@ func (u uc) DeleteUser(c *nf.Ctx, id uint64) error {
if opt.EnableUserCache {
if err = u.RmUserCache(c, id); err != nil {
log.Warn(c, "controller.DeleteUser: rm user=%d cache err=%v", id, err)
log.Warn(c.Context(), "controller.DeleteUser: rm user=%d cache err=%v", id, err)
}
}

View File

@ -86,16 +86,16 @@ func LogList(c *nf.Ctx) error {
for _, logItem := range list {
m := make(map[string]any)
if err = logItem.Content.Bind(&m); err != nil {
log.Warn(c, "handler.LogList: log=%d content=%v bind map[string]any err=%v", logItem.Id, logItem.Content, err)
log.Warn(c.Context(), "handler.LogList: log=%d content=%v bind map[string]any err=%v", logItem.Id, logItem.Content, err)
continue
}
if logItem.HTML, err = logItem.Type.Render(m); err != nil {
log.Warn(c, "handler.LogList: log=%d template=%s render map=%+v err=%v", logItem.Id, logItem.Type.Template(), m, err)
log.Warn(c.Context(), "handler.LogList: log=%d template=%s render map=%+v err=%v", logItem.Id, logItem.Type.Template(), m, err)
continue
}
log.Debug(c, "handler.LogList: log=%d render map=%+v string=%s", logItem.Id, m, logItem.HTML)
log.Debug(c.Context(), "handler.LogList: log=%d render map=%+v string=%s", logItem.Id, m, logItem.HTML)
}
return resp.Resp200(c, nf.Map{"list": list, "total": total})

View File

@ -1,40 +1,40 @@
package log
import (
"context"
"fmt"
"github.com/loveuer/nf"
ulog "github.com/loveuer/nf/nft/log"
"ultone/internal/opt"
)
func _mix(c *nf.Ctx, msg string) string {
if c == nil {
func _mix(ctx context.Context, msg string) string {
if ctx == nil {
return msg
}
return fmt.Sprintf("%v | %s", c.Locals(opt.LocalTraceKey), msg)
return fmt.Sprintf("%v | %s", ctx.Value(nf.TraceKey), msg)
}
func Debug(c *nf.Ctx, msg string, data ...any) {
ulog.Debug(_mix(c, msg), data...)
func Debug(ctx context.Context, msg string, data ...any) {
ulog.Debug(_mix(ctx, msg), data...)
}
func Info(c *nf.Ctx, msg string, data ...any) {
ulog.Info(_mix(c, msg), data...)
func Info(ctx context.Context, msg string, data ...any) {
ulog.Info(_mix(ctx, msg), data...)
}
func Warn(c *nf.Ctx, msg string, data ...any) {
ulog.Warn(_mix(c, msg), data...)
func Warn(ctx context.Context, msg string, data ...any) {
ulog.Warn(_mix(ctx, msg), data...)
}
func Error(c *nf.Ctx, msg string, data ...any) {
ulog.Error(_mix(c, msg), data...)
func Error(ctx context.Context, msg string, data ...any) {
ulog.Error(_mix(ctx, msg), data...)
}
func Panic(c *nf.Ctx, msg string, data ...any) {
ulog.Panic(_mix(c, msg), data...)
func Panic(ctx context.Context, msg string, data ...any) {
ulog.Panic(_mix(ctx, msg), data...)
}
func Fatal(c *nf.Ctx, msg string, data ...any) {
ulog.Fatal(_mix(c, msg), data...)
func Fatal(ctx context.Context, msg string, data ...any) {
ulog.Fatal(_mix(ctx, msg), data...)
}

View File

@ -31,11 +31,11 @@ func NewAuth() nf.HandlerFunc {
return resp.Resp401(c, token)
}
log.Debug(c, "middleware.NewAuth: token=%s", token)
log.Debug(c.Context(), "middleware.NewAuth: token=%s", token)
target, err := controller.UserController.GetUserByToken(c, token)
if err != nil {
log.Error(c, "middleware.NewAuth: get user by token=%s err=%v", token, err)
log.Error(c.Context(), "middleware.NewAuth: get user by token=%s err=%v", token, err)
if errors.Is(err, redis.Nil) || errors.Is(err, gredis.ErrKeyNotFound) {
return resp.Resp401(c, err)
}

View File

@ -33,7 +33,7 @@ func NewFront(ff *embed.FS, basePath string) nf.HandlerFunc {
)
if bs, err = ff.ReadFile(basePath + path); err != nil {
log.Debug(c, "embed read file [%s]%s err: %v", basePath, path, err)
log.Debug(c.Context(), "embed read file [%s]%s err: %v", basePath, path, err)
c.Set("Content-Type", "text/html")
_, err = c.Write(indexBytes)
return err

View File

@ -2,38 +2,25 @@ package logger
import (
"fmt"
"github.com/google/uuid"
"github.com/loveuer/esgo2dump/log"
"github.com/loveuer/nf"
"github.com/loveuer/nf/nft/resp"
"net/http"
"strconv"
"time"
"ultone/internal/opt"
"ultone/internal/tool"
)
var (
Header = http.CanonicalHeaderKey("X-Trace-Id")
)
func New() nf.HandlerFunc {
return func(c *nf.Ctx) error {
var (
now = time.Now()
traceId = c.Get(Header)
logFn func(msg string, data ...any)
ip = c.IP()
now = time.Now()
logFn func(msg string, data ...any)
ip = c.IP()
)
if traceId == "" {
traceId = uuid.Must(uuid.NewV7()).String()
}
c.SetHeader(Header, traceId)
c.Locals(opt.LocalTraceKey, traceId)
traceId := c.Context().Value(nf.TraceKey)
c.Locals(nf.TraceKey, traceId)
err := c.Next()
status, _ := strconv.Atoi(c.Writer.Header().Get(resp.RealStatusHeader))

View File

@ -36,7 +36,7 @@ const (
// todo: 操作日志 最多延迟多少秒写入(最多缓存多少秒的日志,然后 bulk 写入)
OpLogWriteDurationSecond = 5
LocalTraceKey = "X-Trace"
LocalTraceKey = "X-Trace-Id"
)
var (