Add context for everything

Signed-off-by: Asai Neko <sugar@sne.moe>
This commit is contained in:
2026-01-21 16:43:46 +08:00
parent 83df018d34
commit b8f89ab655
27 changed files with 309 additions and 127 deletions

View File

@@ -1,12 +1,19 @@
package logger
import (
"context"
"io"
"log/slog"
"os"
"strings"
"go.opentelemetry.io/otel/trace"
)
type otlpHandler struct {
slog.Handler
}
func Init() {
levelStr := strings.ToLower(os.Getenv("LOG_LEVEL"))
var level slog.Level
@@ -22,14 +29,9 @@ func Init() {
}
var writer io.Writer = os.Stdout
if level == slog.LevelDebug {
file, err := os.OpenFile("app.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
slog.Error("Failed to open log file for debug mode", "err", err)
} else {
writer = io.MultiWriter(os.Stdout, file)
}
file, _ := os.OpenFile("app.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
writer = io.MultiWriter(os.Stdout, file)
}
opts := &slog.HandlerOptions{
@@ -43,7 +45,19 @@ func Init() {
},
}
handler := slog.NewJSONHandler(writer, opts)
baseHandler := slog.NewJSONHandler(writer, opts)
handler := &otlpHandler{baseHandler}
logger := slog.New(handler)
slog.SetDefault(logger)
}
func (h *otlpHandler) Handle(ctx context.Context, r slog.Record) error {
span := trace.SpanFromContext(ctx)
if span.SpanContext().HasTraceID() {
r.AddAttrs(
slog.String("trace_id", span.SpanContext().TraceID().String()),
slog.String("span_id", span.SpanContext().SpanID().String()),
)
}
return h.Handler.Handle(ctx, r)
}