fix panic

This commit is contained in:
Yuan Teoh
2026-02-10 16:07:44 -08:00
parent 8ffafd7937
commit d4959093c8
3 changed files with 58 additions and 2 deletions

View File

@@ -78,6 +78,16 @@ func (sl *StdLogger) ErrorContext(ctx context.Context, msg string, keysAndValues
sl.errLogger.ErrorContext(ctx, msg, keysAndValues...)
}
// SlogLogger returns a single standard *slog.Logger that routes
// records to the outLogger or errLogger based on the log level.
func (sl *StdLogger) SlogLogger() *slog.Logger {
splitHandler := &SplitHandler{
OutHandler: sl.outLogger.Handler(),
ErrHandler: sl.errLogger.Handler(),
}
return slog.New(splitHandler)
}
const (
Debug = "DEBUG"
Info = "INFO"
@@ -195,3 +205,46 @@ func (sl *StructuredLogger) WarnContext(ctx context.Context, msg string, keysAnd
func (sl *StructuredLogger) ErrorContext(ctx context.Context, msg string, keysAndValues ...any) {
sl.errLogger.ErrorContext(ctx, msg, keysAndValues...)
}
// SlogLogger returns a single standard *slog.Logger that routes
// records to the outLogger or errLogger based on the log level.
func (sl *StructuredLogger) SlogLogger() *slog.Logger {
splitHandler := &SplitHandler{
OutHandler: sl.outLogger.Handler(),
ErrHandler: sl.errLogger.Handler(),
}
return slog.New(splitHandler)
}
type SplitHandler struct {
OutHandler slog.Handler
ErrHandler slog.Handler
}
func (h *SplitHandler) Enabled(ctx context.Context, level slog.Level) bool {
if level >= slog.LevelError {
return h.ErrHandler.Enabled(ctx, level)
}
return h.OutHandler.Enabled(ctx, level)
}
func (h *SplitHandler) Handle(ctx context.Context, r slog.Record) error {
if r.Level >= slog.LevelError {
return h.ErrHandler.Handle(ctx, r)
}
return h.OutHandler.Handle(ctx, r)
}
func (h *SplitHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
return &SplitHandler{
OutHandler: h.OutHandler.WithAttrs(attrs),
ErrHandler: h.ErrHandler.WithAttrs(attrs),
}
}
func (h *SplitHandler) WithGroup(name string) slog.Handler {
return &SplitHandler{
OutHandler: h.OutHandler.WithGroup(name),
ErrHandler: h.ErrHandler.WithGroup(name),
}
}

View File

@@ -16,6 +16,7 @@ package log
import (
"context"
"log/slog"
)
// Logger is the interface used throughout the project for logging.
@@ -28,4 +29,7 @@ type Logger interface {
WarnContext(ctx context.Context, format string, args ...any)
// ErrorContext is for reporting errors.
ErrorContext(ctx context.Context, format string, args ...any)
// Single standard slog.Logger that routes records to the outLogger or
// errLogger based on log levels
SlogLogger() *slog.Logger
}

View File

@@ -18,7 +18,6 @@ import (
"context"
"fmt"
"io"
"log/slog"
"net"
"net/http"
"slices"
@@ -356,7 +355,7 @@ func NewServer(ctx context.Context, cfg ServerConfig) (*Server, error) {
Level: logLevel,
Schema: schema,
}
logger := l.(*slog.Logger)
logger := l.SlogLogger()
r.Use(httplog.RequestLogger(logger, httpOpts))
sourcesMap, authServicesMap, embeddingModelsMap, toolsMap, toolsetsMap, promptsMap, promptsetsMap, err := InitializeConfigs(ctx, cfg)