Skip to content

Commit 6bdf3c3

Browse files
author
Russ Egan
committed
Replaced some of the package functions with direct access to the default controller
1 parent ce3f398 commit 6bdf3c3

File tree

3 files changed

+29
-64
lines changed

3 files changed

+29
-64
lines changed

v2/TODO.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,15 @@
2424
- And what else?
2525
- [ ] Review ConfigFromEnv(). Not sure if I should break that down more.
2626
- [ ] Docs
27-
- [ ] flumetest, and could this be replaced by
27+
- [ ] flumetest, and could this be replaced by https://github.com/neilotoole/slogt/blob/master/slogt.go
2828
- [ ] LoggerWriter, could this be replaced by an off the shelf sink?
2929
- [ ] Make the "logger" key name configurable
3030
- [ ] What happens when using flume with no configuration, by default? Should it act like slog, and forward to the legacy log package?
31+
- for now, it forwards to the slog default handler, which in turn forwards to the legacy log package. I considered adding
32+
a function which reverses that flow, by setting slog.SetDefault() to a flume handler...but that gets really wierd. slog's
33+
package level functions, like With(), don't make much sense, since setting the slog default handler *after* calling
34+
slog.With(), means that child logger will be stuck with the older handler...it generally poses the same order-of-init problems
35+
which flume is trying to solve in general. So, for now, I'm leaving out this type of function. I will document that users
36+
*can* do this if they wish, by first setting a new default sink, then setting slog's default handler, but that there are caveats.
3137
- [ ] When using Config to set all the levels, does that clear any prior level settings? Is there generally a way to clear/reset
3238
all confs?

v2/default_controller.go

Lines changed: 6 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ const (
2828
// package http
2929
// var logger = flume.New("http")
3030
func New(name string) *slog.Logger {
31-
return deflt().Logger(name)
31+
return Default().Logger(name)
3232
}
3333

34-
// NewHandler creates a named flume Handler, managed by the default flume.Controller.
34+
// Handler creates a named flume Handler, managed by the default flume.Controller.
3535
//
3636
// These package-level functions are typically used to initialize
3737
// package-level loggers in var initializers, which can later
@@ -41,50 +41,9 @@ func New(name string) *slog.Logger {
4141
// Example:
4242
//
4343
// package http
44-
// var logger = slog.New(flume.NewHandler("http"))
45-
func NewHandler(name string) slog.Handler {
46-
return deflt().Handler(name)
47-
}
48-
49-
// SetSink sets the sink handler for flume handlers with the given
50-
// name, managed by the default flume.Controller.
51-
// See [Controller.SetSink]
52-
func SetSink(name string, sink slog.Handler) {
53-
deflt().SetSink(name, sink)
54-
}
55-
56-
// SetDefaultSink sets the default sink for the default flume.Controller.
57-
// See [Controller.SetDefaultSink]
58-
func SetDefaultSink(sink slog.Handler) {
59-
deflt().SetDefaultSink(sink)
60-
}
61-
62-
// SetLevel sets the log level for flume handlers with the give name,
63-
// managed by the default flume.Controller.
64-
// See [Controller.SetLevel]
65-
func SetLevel(name string, l slog.Level) {
66-
deflt().SetLevel(name, l)
67-
}
68-
69-
// SetDefaultLevel sets the default log level for the default
70-
// flume.Controller.
71-
// See [Controller.SetDefaultLevel]
72-
func SetDefaultLevel(l slog.Level) {
73-
deflt().SetDefaultLevel(l)
74-
}
75-
76-
// Use applies middleware to flume handlers with the given name, managed
77-
// by the default flume.Controller.
78-
// See [Controller.Use]
79-
func Use(name string, middleware ...Middleware) {
80-
deflt().Use(name, middleware...)
81-
}
82-
83-
// UseDefault applies middleware to all flume handlers managed by
84-
// the default flume.Controller.
85-
// See [Controller.Use.Default]
86-
func UseDefault(middleware ...Middleware) {
87-
deflt().UseDefault(middleware...)
44+
// var logger = slog.New(flume.Handler("http"))
45+
func Handler(name string) slog.Handler {
46+
return Default().Handler(name)
8847
}
8948

9049
var defaultFactory atomic.Pointer[Controller]
@@ -94,6 +53,6 @@ func init() {
9453
defaultFactory.Store(NewController(slog.Default().Handler()))
9554
}
9655

97-
func deflt() *Controller {
56+
func Default() *Controller {
9857
return defaultFactory.Load()
9958
}

v2/handler_test.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -224,58 +224,58 @@ func TestHandlers(t *testing.T) {
224224
name: "default",
225225
wantJSON: `{"level": "INFO", "logger": "def1", "msg":"hi"}`,
226226
handlerFn: func(_ *testing.T, buf *bytes.Buffer, opts *slog.HandlerOptions) slog.Handler {
227-
SetDefaultSink(slog.NewJSONHandler(buf, opts))
228-
return NewHandler("def1")
227+
Default().SetDefaultSink(slog.NewJSONHandler(buf, opts))
228+
return Handler("def1")
229229
},
230230
},
231231
{
232232
name: "default with text",
233233
wantText: "level=INFO msg=hi logger=def1\n",
234234
handlerFn: func(_ *testing.T, buf *bytes.Buffer, opts *slog.HandlerOptions) slog.Handler {
235-
SetDefaultSink(slog.NewTextHandler(buf, opts))
236-
return NewHandler("def1")
235+
Default().SetDefaultSink(slog.NewTextHandler(buf, opts))
236+
return Handler("def1")
237237
},
238238
},
239239
{
240240
name: "default with specific logger",
241241
wantText: "level=INFO msg=hi logger=def2\n",
242242
handlerFn: func(_ *testing.T, buf *bytes.Buffer, opts *slog.HandlerOptions) slog.Handler {
243-
SetDefaultSink(slog.NewJSONHandler(buf, opts))
244-
SetSink("def2", slog.NewTextHandler(buf, opts))
243+
Default().SetDefaultSink(slog.NewJSONHandler(buf, opts))
244+
Default().SetSink("def2", slog.NewTextHandler(buf, opts))
245245

246-
return NewHandler("def2")
246+
return Handler("def2")
247247
},
248248
},
249249
{
250250
name: "default log level",
251251
level: slog.LevelDebug,
252252
// wantText: "level=INFO msg=hi logger=def1\n",
253253
handlerFn: func(_ *testing.T, buf *bytes.Buffer, opts *slog.HandlerOptions) slog.Handler {
254-
SetDefaultSink(slog.NewTextHandler(buf, opts))
255-
return NewHandler("def1")
254+
Default().SetDefaultSink(slog.NewTextHandler(buf, opts))
255+
return Handler("def1")
256256
},
257257
},
258258
{
259259
name: "set default log level",
260260
level: slog.LevelDebug,
261261
wantText: "level=DEBUG msg=hi logger=def1\n",
262262
handlerFn: func(_ *testing.T, buf *bytes.Buffer, opts *slog.HandlerOptions) slog.Handler {
263-
SetDefaultSink(slog.NewTextHandler(buf, opts))
264-
SetDefaultLevel(slog.LevelDebug)
263+
Default().SetDefaultSink(slog.NewTextHandler(buf, opts))
264+
Default().SetDefaultLevel(slog.LevelDebug)
265265

266-
return NewHandler("def1")
266+
return Handler("def1")
267267
},
268268
},
269269
{
270270
name: "set specific log level",
271271
level: slog.LevelDebug,
272272
wantText: "level=DEBUG msg=hi logger=TestHandlers/set_specific_log_level\n",
273273
handlerFn: func(t *testing.T, buf *bytes.Buffer, opts *slog.HandlerOptions) slog.Handler {
274-
SetDefaultSink(slog.NewTextHandler(buf, opts))
275-
SetDefaultLevel(slog.LevelInfo)
276-
SetLevel(t.Name(), slog.LevelDebug)
274+
Default().SetDefaultSink(slog.NewTextHandler(buf, opts))
275+
Default().SetDefaultLevel(slog.LevelInfo)
276+
Default().SetLevel(t.Name(), slog.LevelDebug)
277277

278-
return NewHandler(t.Name())
278+
return Handler(t.Name())
279279
},
280280
},
281281
}

0 commit comments

Comments
 (0)