context.go

 1package log
 2
 3import (
 4	"context"
 5	"log/slog"
 6)
 7
 8type loggerKey struct{}
 9
10var ctxLogger loggerKey
11
12// ToContext passes the cannon logger in the context
13func ToContext(parent context.Context, logger *slog.Logger) context.Context {
14	return context.WithValue(parent, ctxLogger, logger)
15}
16
17// FromContext returns the cannon logger in the context. If not found, it returns
18// the default slog logger.
19func FromContext(ctx context.Context) *slog.Logger {
20	log := ctx.Value(ctxLogger)
21	logger, ok := log.(*slog.Logger)
22	if !ok || logger == nil {
23		return slog.Default()
24	}
25	return logger
26}