Skip to content

Commit 3600f4a

Browse files
Evan Phoenixmpalmi
Evan Phoenix
andauthored
Conside if the level is to be used separately from if the levels should be calculated (#137)
* Conside if the level is to be used separately from if the levels should be calculated * Add a test for post-SetLevel .Named() --------- Co-authored-by: Mike Palmiotto <[email protected]>
1 parent 71d286f commit 3600f4a

File tree

2 files changed

+79
-4
lines changed

2 files changed

+79
-4
lines changed

intlogger.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ type intLogger struct {
9393
writer *writer
9494
level *int32
9595

96+
// The value of curEpoch when our level was set
97+
setEpoch uint64
98+
9699
// The value of curEpoch the last time we performed the level sync process
97100
ownEpoch uint64
98101

@@ -892,18 +895,19 @@ func (l *intLogger) SetLevel(level Level) {
892895
l.level = nsl
893896

894897
l.ownEpoch = atomic.AddUint64(l.curEpoch, 1)
898+
l.setEpoch = l.ownEpoch
895899
}
896900

897901
func (l *intLogger) searchLevelPtr() *int32 {
898902
p := l.parent
899903

900904
ptr := l.level
901905

902-
max := l.ownEpoch
906+
max := l.setEpoch
903907

904908
for p != nil {
905-
if p.ownEpoch > max {
906-
max = p.ownEpoch
909+
if p.setEpoch > max {
910+
max = p.setEpoch
907911
ptr = p.level
908912
}
909913

logger_test.go

+72-1
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,44 @@ func TestLogger(t *testing.T) {
666666
assert.Equal(t, Error, b.GetLevel())
667667
})
668668

669-
t.Run("level sync example", func(t *testing.T) {
669+
t.Run("level sync example 1", func(t *testing.T) {
670+
var buf bytes.Buffer
671+
672+
logger := New(&LoggerOptions{
673+
Name: "root",
674+
Output: &buf,
675+
SyncParentLevel: true,
676+
})
677+
678+
s := assert.New(t)
679+
680+
a := logger.Named("a")
681+
b := a.Named("b")
682+
c := a.Named("c")
683+
684+
b.SetLevel(Warn)
685+
s.Equal(Info, a.GetLevel())
686+
s.Equal(Warn, b.GetLevel())
687+
s.Equal(Info, c.GetLevel())
688+
689+
c.SetLevel(Error)
690+
s.Equal(Info, a.GetLevel())
691+
s.Equal(Warn, b.GetLevel())
692+
s.Equal(Error, c.GetLevel())
693+
694+
a.SetLevel(Warn)
695+
s.Equal(Warn, a.GetLevel())
696+
s.Equal(Warn, b.GetLevel())
697+
s.Equal(Warn, c.GetLevel())
698+
699+
logger.SetLevel(Trace)
700+
s.Equal(Trace, logger.GetLevel())
701+
s.Equal(Trace, a.GetLevel())
702+
s.Equal(Trace, b.GetLevel())
703+
s.Equal(Trace, c.GetLevel())
704+
})
705+
706+
t.Run("level sync example 2", func(t *testing.T) {
670707
var buf bytes.Buffer
671708

672709
logger := New(&LoggerOptions{
@@ -700,6 +737,40 @@ func TestLogger(t *testing.T) {
700737
s.Equal(Trace, b.GetLevel())
701738
s.Equal(Trace, c.GetLevel())
702739
})
740+
t.Run("level sync example 3", func(t *testing.T) {
741+
var buf bytes.Buffer
742+
743+
logger := New(&LoggerOptions{
744+
Name: "root",
745+
Output: &buf,
746+
SyncParentLevel: true,
747+
})
748+
749+
s := assert.New(t)
750+
751+
a := logger.Named("a")
752+
b := a.Named("b")
753+
754+
a.SetLevel(Trace)
755+
s.Equal(Trace, a.GetLevel())
756+
s.Equal(Trace, b.GetLevel())
757+
758+
b.SetLevel(Warn)
759+
s.Equal(Trace, a.GetLevel())
760+
s.Equal(Warn, b.GetLevel())
761+
762+
c := a.Named("c")
763+
764+
c.SetLevel(Error)
765+
s.Equal(Trace, a.GetLevel())
766+
s.Equal(Warn, b.GetLevel())
767+
s.Equal(Error, c.GetLevel())
768+
769+
a.SetLevel(Warn)
770+
s.Equal(Warn, a.GetLevel())
771+
s.Equal(Warn, b.GetLevel())
772+
s.Equal(Warn, c.GetLevel())
773+
})
703774
}
704775

705776
func TestLogger_leveledWriter(t *testing.T) {

0 commit comments

Comments
 (0)