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  }