...
1
2
3
4
19
20 package logr
21
22 import (
23 "context"
24 "fmt"
25 "log/slog"
26 )
27
28
29 func FromContext(ctx context.Context) (Logger, error) {
30 v := ctx.Value(contextKey{})
31 if v == nil {
32 return Logger{}, notFoundError{}
33 }
34
35 switch v := v.(type) {
36 case Logger:
37 return v, nil
38 case *slog.Logger:
39 return FromSlogHandler(v.Handler()), nil
40 default:
41
42 panic(fmt.Sprintf("unexpected value type for logr context key: %T", v))
43 }
44 }
45
46
47 func FromContextAsSlogLogger(ctx context.Context) *slog.Logger {
48 v := ctx.Value(contextKey{})
49 if v == nil {
50 return nil
51 }
52
53 switch v := v.(type) {
54 case Logger:
55 return slog.New(ToSlogHandler(v))
56 case *slog.Logger:
57 return v
58 default:
59
60 panic(fmt.Sprintf("unexpected value type for logr context key: %T", v))
61 }
62 }
63
64
65
66 func FromContextOrDiscard(ctx context.Context) Logger {
67 if logger, err := FromContext(ctx); err == nil {
68 return logger
69 }
70 return Discard()
71 }
72
73
74
75 func NewContext(ctx context.Context, logger Logger) context.Context {
76 return context.WithValue(ctx, contextKey{}, logger)
77 }
78
79
80
81 func NewContextWithSlogLogger(ctx context.Context, logger *slog.Logger) context.Context {
82 return context.WithValue(ctx, contextKey{}, logger)
83 }
84
View as plain text