5
5
"fmt"
6
6
"os"
7
7
"runtime"
8
+ "sync/atomic"
8
9
"time"
9
10
10
11
"go.opencensus.io/trace"
@@ -147,24 +148,17 @@ type Sink interface {
147
148
}
148
149
149
150
// 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 {
159
152
l := Logger {
160
153
sinks : []sink {
161
154
{
162
155
sink : s ,
163
- level : opts . Level ( ),
156
+ level : new ( int64 ),
164
157
},
165
158
},
166
159
testingHelper : func () {},
167
160
}
161
+ l .SetLevel (LevelDebug )
168
162
169
163
if sink , ok := s .(interface {
170
164
XXX_slogTestingHelper () func ()
@@ -176,7 +170,7 @@ func Make(s Sink, opts *Options) Logger {
176
170
177
171
type sink struct {
178
172
sink Sink
179
- level Level
173
+ level * int64
180
174
pl parsedFields
181
175
}
182
176
@@ -226,11 +220,18 @@ func (l Logger) With(fields ...Field) Logger {
226
220
return l
227
221
}
228
222
223
+ func (l Logger ) SetLevel (level Level ) {
224
+ for _ , s := range l .sinks {
225
+ atomic .StoreInt64 (s .level , int64 (level ))
226
+ }
227
+ }
228
+
229
229
func (l Logger ) log (ctx context.Context , level Level , msg string , fields []Field ) {
230
230
l .testingHelper ()
231
231
232
232
for _ , s := range l .sinks {
233
- if level < s .level {
233
+ slevel := Level (atomic .LoadInt64 (s .level ))
234
+ if level < slevel {
234
235
// We will not log levels below the current log level.
235
236
continue
236
237
}
@@ -249,12 +250,6 @@ func (l Logger) log(ctx context.Context, level Level, msg string, fields []Field
249
250
}
250
251
}
251
252
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
-
258
253
type parsedFields struct {
259
254
component string
260
255
spanCtx trace.SpanContext
0 commit comments