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}