github.com/ssgreg/logf@v1.4.1/mutable_level.go (about) 1 package logf 2 3 import "sync/atomic" 4 5 // NewMutableLevel creates an instance of MutableLevel with the given 6 // starting level. 7 func NewMutableLevel(l Level) *MutableLevel { 8 return &MutableLevel{level: uint32(l)} 9 } 10 11 // MutableLevel allows to switch the logging level atomically. 12 // 13 // The logger does not allow to change logging level in runtime by itself. 14 type MutableLevel struct { 15 level uint32 16 } 17 18 // Checker is common way to get LevelChecker. Use it with every custom 19 // implementation of Level. 20 func (l *MutableLevel) Checker() LevelChecker { 21 return func(o Level) bool { 22 return l.Level().Enabled(o) 23 } 24 } 25 26 // LevelChecker implements LevelCheckerGetter. 27 func (l *MutableLevel) LevelChecker() LevelChecker { 28 return l.Checker() 29 } 30 31 // Level returns the current logging level. 32 func (l *MutableLevel) Level() Level { 33 return (Level)(atomic.LoadUint32(&l.level)) 34 } 35 36 // Set switches the current logging level to the given one. 37 func (l *MutableLevel) Set(o Level) { 38 atomic.StoreUint32(&l.level, uint32(o)) 39 }