logb/level.go

75 lines
1.0 KiB
Go
Executable File

package logb
import (
"strings"
"sync"
)
const (
cError = iota
cWarn
cInfo
cDebug
cVerbose
)
var (
ERROR = Level{Level: cError}
WARN = Level{Level: cWarn}
INFO = Level{Level: cInfo}
DEBUG = Level{Level: cDebug}
VERBOSE = Level{Level: cVerbose}
)
type Level struct {
Level int
Lock sync.Mutex
}
func NewLevel() *Level {
return &Level{
Level: cInfo,
}
}
func (l *Level) Set(v Level) {
l.Lock.Lock()
defer l.Lock.Unlock()
l.Level = v.Level
}
func (l *Level) Get(v Level) int {
return l.Level
}
func (l Level) Should(v Level) bool {
return l.Level >= v.Level
}
func (l Level) String() string {
s := "undefined"
switch l.Level {
case ERROR.Level:
s = "ERROR"
case WARN.Level:
s = "WARN"
case INFO.Level:
s = "INFO"
case DEBUG.Level:
s = "DEBUG"
case VERBOSE.Level:
s = "VERBOSE"
}
return s
}
func LevelFromString(s string) Level {
s = strings.ToUpper(s)
for _, l := range []Level{ERROR, WARN, INFO, DEBUG, VERBOSE} {
if l.String() == s {
return l
}
}
return INFO
}