update: X-Trace-Id
This commit is contained in:
@ -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")
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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})
|
||||
|
@ -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...)
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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))
|
||||
|
@ -36,7 +36,7 @@ const (
|
||||
// todo: 操作日志 最多延迟多少秒写入(最多缓存多少秒的日志,然后 bulk 写入)
|
||||
OpLogWriteDurationSecond = 5
|
||||
|
||||
LocalTraceKey = "X-Trace"
|
||||
LocalTraceKey = "X-Trace-Id"
|
||||
)
|
||||
|
||||
var (
|
||||
|
Reference in New Issue
Block a user