Skip to content

Commit 68215bb

Browse files
committed
Allow overriding log level atomically
Closes #16
1 parent 3414b79 commit 68215bb

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

slog.go

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"os"
77
"runtime"
8+
"sync/atomic"
89
"time"
910

1011
"go.opencensus.io/trace"
@@ -147,24 +148,17 @@ type Sink interface {
147148
}
148149

149150
// Make creates a logger that writes logs to sink.
150-
func Make(s Sink, opts *Options) Logger {
151-
if opts == nil {
152-
opts = &Options{
153-
Level: func() Level {
154-
return LevelDebug
155-
},
156-
}
157-
}
158-
151+
func Make(s Sink) Logger {
159152
l := Logger{
160153
sinks: []sink{
161154
{
162155
sink: s,
163-
level: opts.Level(),
156+
level: new(int64),
164157
},
165158
},
166159
testingHelper: func() {},
167160
}
161+
l.SetLevel(LevelDebug)
168162

169163
if sink, ok := s.(interface {
170164
XXX_slogTestingHelper() func()
@@ -176,7 +170,7 @@ func Make(s Sink, opts *Options) Logger {
176170

177171
type sink struct {
178172
sink Sink
179-
level Level
173+
level *int64
180174
pl parsedFields
181175
}
182176

@@ -226,11 +220,18 @@ func (l Logger) With(fields ...Field) Logger {
226220
return l
227221
}
228222

223+
func (l Logger) SetLevel(level Level) {
224+
for _, s := range l.sinks {
225+
atomic.StoreInt64(s.level, int64(level))
226+
}
227+
}
228+
229229
func (l Logger) log(ctx context.Context, level Level, msg string, fields []Field) {
230230
l.testingHelper()
231231

232232
for _, s := range l.sinks {
233-
if level < s.level {
233+
slevel := Level(atomic.LoadInt64(s.level))
234+
if level < slevel {
234235
// We will not log levels below the current log level.
235236
continue
236237
}
@@ -249,12 +250,6 @@ func (l Logger) log(ctx context.Context, level Level, msg string, fields []Field
249250
}
250251
}
251252

252-
// The base options for every Logger.
253-
type Options struct {
254-
// Level returns level to log at, defaults to LevelDebug.
255-
Level func() Level
256-
}
257-
258253
type parsedFields struct {
259254
component string
260255
spanCtx trace.SpanContext

0 commit comments

Comments
 (0)