@@ -78,39 +78,43 @@ func UnmarshalEnv(o *HandlerOptions, envvars ...string) error {
7878
7979var handlerFns sync.Map
8080
81- func init () { //nolint:gochecknoinits
82- resetBuiltInHandlerFns ()
83- }
81+ var initHandlerFnsOnce sync.Once
8482
8583func resetBuiltInHandlerFns () {
8684 handlerFns = sync.Map {}
8785 textHandlerFn := func (_ string , w io.Writer , opts * slog.HandlerOptions ) slog.Handler {
8886 return slog .NewTextHandler (w , opts )
8987 }
90- RegisterHandlerFn (TextHandler , textHandlerFn )
88+ handlerFns . Store (TextHandler , textHandlerFn )
9189 // for v1 compatibility, "console" is an alias for "text"
92- RegisterHandlerFn (ConsoleHandler , textHandlerFn )
93- RegisterHandlerFn (JSONHandler , func (_ string , w io.Writer , opts * slog.HandlerOptions ) slog.Handler {
90+ handlerFns . Store (ConsoleHandler , textHandlerFn )
91+ handlerFns . Store (JSONHandler , func (_ string , w io.Writer , opts * slog.HandlerOptions ) slog.Handler {
9492 return slog .NewJSONHandler (w , opts )
9593 })
96- RegisterHandlerFn (TermHandler , termHandlerFn (false ))
97- RegisterHandlerFn (TermColorHandler , termHandlerFn (true ))
98- RegisterHandlerFn (NoopHandler , func (_ string , _ io.Writer , _ * slog.HandlerOptions ) slog.Handler {
94+ handlerFns . Store (TermHandler , termHandlerFn (false ))
95+ handlerFns . Store (TermColorHandler , termHandlerFn (true ))
96+ handlerFns . Store (NoopHandler , func (_ string , _ io.Writer , _ * slog.HandlerOptions ) slog.Handler {
9997 return noop
10098 })
10199}
102100
103- func LookupHandlerFn (name string ) HandlerFn {
101+ func initHandlerFns () {
102+ initHandlerFnsOnce .Do (func () {
103+ resetBuiltInHandlerFns ()
104+ })
105+ }
106+
107+ func LookupHandlerFn (name string ) func (string , io.Writer , * slog.HandlerOptions ) slog.Handler {
108+ initHandlerFns ()
104109 v , ok := handlerFns .Load (name )
105110 if ! ok {
106111 return nil
107112 }
108- return v .(HandlerFn ) //nolint:forcetypeassert // if it's not a HandlerFn, we should panic
113+ return v .(func ( string , io. Writer , * slog. HandlerOptions ) slog. Handler ) //nolint:forcetypeassert // if it's not a HandlerFn, we should panic
109114}
110115
111- type HandlerFn func (string , io.Writer , * slog.HandlerOptions ) slog.Handler
112-
113- func RegisterHandlerFn (name string , fn HandlerFn ) {
116+ func RegisterHandlerFn (name string , fn func (string , io.Writer , * slog.HandlerOptions ) slog.Handler ) {
117+ initHandlerFns ()
114118 if fn == nil {
115119 panic (fmt .Sprintf ("constructor for sink %q is nil" , name ))
116120 }
@@ -120,7 +124,7 @@ func RegisterHandlerFn(name string, fn HandlerFn) {
120124 handlerFns .Store (name , fn )
121125}
122126
123- func termHandlerFn (color bool ) HandlerFn {
127+ func termHandlerFn (color bool ) func ( string , io. Writer , * slog. HandlerOptions ) slog. Handler {
124128 return func (_ string , w io.Writer , opts * slog.HandlerOptions ) slog.Handler {
125129 if opts == nil {
126130 opts = & slog.HandlerOptions {}
@@ -131,7 +135,7 @@ func termHandlerFn(color bool) HandlerFn {
131135 Theme : console .NewDefaultTheme (),
132136 ReplaceAttr : opts .ReplaceAttr ,
133137 TimeFormat : "15:04:05.000" ,
134- HeaderFormat : "%t %[logger]12h %l | %m" ,
138+ HeaderFormat : "%t %[" + LoggerKey + "]8h %l | %m" ,
135139 TruncateSourcePath : 2 ,
136140 })
137141 }
0 commit comments