Skip to content

Commit 094bf18

Browse files
committed
Allows changing the logger level at runtime.
1 parent 6bb257e commit 094bf18

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

log.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"io"
2222
"os"
2323
"sync"
24+
"sync/atomic"
2425
"time"
2526

2627
"github.com/edoger/zkits-logger/internal"
@@ -184,7 +185,7 @@ type Log interface {
184185
// and each independent Logger shares the same core instance.
185186
type core struct {
186187
name string
187-
level Level
188+
level uint32
188189
formatter Formatter
189190
writer io.Writer
190191
levelWriter map[Level]io.Writer
@@ -203,7 +204,7 @@ type core struct {
203204
func newCore(name string) *core {
204205
return &core{
205206
name: name,
206-
level: TraceLevel,
207+
level: uint32(TraceLevel),
207208
formatter: DefaultJSONFormatter(),
208209
writer: os.Stdout,
209210
levelWriter: make(map[Level]io.Writer),
@@ -430,7 +431,7 @@ func (o *log) Log(level Level, args ...interface{}) {
430431

431432
// Uses the given parameters to record a log of the specified level.
432433
func (o *log) log(level Level, args ...interface{}) {
433-
if !o.core.level.IsEnabled(level) {
434+
if !Level(atomic.LoadUint32(&o.core.level)).IsEnabled(level) {
434435
return
435436
}
436437
o.record(level, fmt.Sprint(args...))
@@ -448,7 +449,7 @@ func (o *log) Logln(level Level, args ...interface{}) {
448449

449450
// Uses the given parameters to record a log of the specified level.
450451
func (o *log) logln(level Level, args ...interface{}) {
451-
if !o.core.level.IsEnabled(level) {
452+
if !Level(atomic.LoadUint32(&o.core.level)).IsEnabled(level) {
452453
return
453454
}
454455
s := fmt.Sprintln(args...)
@@ -467,7 +468,7 @@ func (o *log) Logf(level Level, format string, args ...interface{}) {
467468

468469
// Uses the given parameters to record a log of the specified level.
469470
func (o *log) logf(level Level, format string, args ...interface{}) {
470-
if !o.core.level.IsEnabled(level) {
471+
if !Level(atomic.LoadUint32(&o.core.level)).IsEnabled(level) {
471472
return
472473
}
473474
o.record(level, fmt.Sprintf(format, args...))

logger.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"io"
1919
stdlog "log"
2020
"os"
21+
"sync/atomic"
2122
"time"
2223

2324
"github.com/edoger/zkits-logger/internal"
@@ -110,12 +111,12 @@ type logger struct {
110111

111112
// GetLevel returns the current logger level.
112113
func (o *logger) GetLevel() Level {
113-
return o.core.level
114+
return Level(atomic.LoadUint32(&o.core.level))
114115
}
115116

116117
// SetLevel sets the current logger level.
117118
func (o *logger) SetLevel(level Level) Logger {
118-
o.core.level = level
119+
atomic.StoreUint32(&o.core.level, uint32(level))
119120
return o
120121
}
121122

0 commit comments

Comments
 (0)