Merge remote-tracking branch 'origin/master'

This commit is contained in:
M_Kececi
2026-05-06 11:07:55 +03:00
parent 05a2a03a6a
commit 77fe2b04b6
38 changed files with 12676 additions and 8 deletions

78
svc/utils/slog.go Normal file
View File

@@ -0,0 +1,78 @@
package utils
import (
"context"
"log/slog"
"net/http"
"os"
"strings"
)
type traceIDContextKey string
const traceIDKey traceIDContextKey = "trace_id"
func InitSlog() {
level := new(slog.LevelVar)
switch strings.ToLower(strings.TrimSpace(os.Getenv("SLOG_LEVEL"))) {
case "debug":
level.Set(slog.LevelDebug)
case "warn":
level.Set(slog.LevelWarn)
case "error":
level.Set(slog.LevelError)
default:
level.Set(slog.LevelInfo)
}
handler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
Level: level,
AddSource: false,
})
slog.SetDefault(slog.New(handler).With("app", "bssapp-backend"))
}
func TraceIDFromRequest(r *http.Request) string {
if r == nil {
return ""
}
candidates := []string{
strings.TrimSpace(r.Header.Get("X-Trace-ID")),
strings.TrimSpace(r.URL.Query().Get("trace_id")),
strings.TrimSpace(r.Header.Get("X-Request-ID")),
}
for _, candidate := range candidates {
if candidate != "" {
return candidate
}
}
return ""
}
func ContextWithTraceID(ctx context.Context, traceID string) context.Context {
traceID = strings.TrimSpace(traceID)
if ctx == nil || traceID == "" {
return ctx
}
return context.WithValue(ctx, traceIDKey, traceID)
}
func TraceIDFromContext(ctx context.Context) string {
if ctx == nil {
return ""
}
value, _ := ctx.Value(traceIDKey).(string)
return strings.TrimSpace(value)
}
func SlogFromContext(ctx context.Context) *slog.Logger {
traceID := TraceIDFromContext(ctx)
if traceID == "" {
return slog.Default()
}
return slog.Default().With("trace_id", traceID)
}