76 lines
1.5 KiB
Go
76 lines
1.5 KiB
Go
package logging
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type LogLevel int
|
|
const (
|
|
LevelDebug LogLevel = iota
|
|
LevelInfo
|
|
LevelWarn
|
|
LevelError
|
|
LevelFatal
|
|
)
|
|
|
|
func (l LogLevel) String() string {
|
|
str, _ := levelString[l]
|
|
return str
|
|
}
|
|
|
|
func (l LogLevel) MarshalJSON() ([]byte, error) {
|
|
return []byte(`"` + l.String() + `"`), nil
|
|
}
|
|
|
|
func (l *LogLevel) UnmarshalJSON(data []byte) error {
|
|
level_string := strings.Trim(string(data), `"`)
|
|
for key, val := range levelString {
|
|
if val == level_string {
|
|
*l = key
|
|
return nil
|
|
}
|
|
}
|
|
return fmt.Errorf("Logging : ERROR : LogLevel(%s) is not a valid level", level_string)
|
|
}
|
|
|
|
var levelString = map[LogLevel]string {
|
|
LevelDebug: "DEBUG",
|
|
LevelInfo: "INFO",
|
|
LevelWarn: "WARN",
|
|
LevelError: "ERROR",
|
|
LevelFatal: "FATAL",
|
|
}
|
|
|
|
var minLevel = LevelInfo
|
|
var maxLevel = LevelFatal
|
|
|
|
func SetMaxLogLevel(level LogLevel) error {
|
|
|
|
if _, exist := levelString[level]; ! exist {
|
|
return fmt.Errorf("Logger : ERROR : Level with value %d does not exist", level)
|
|
}
|
|
|
|
if level < minLevel {
|
|
return fmt.Errorf("Logger : ERROR : Cannot set your Max LogLevel (%s) to be lower than the current Min (%s)", level, minLevel)
|
|
}
|
|
maxLevel = level
|
|
return nil
|
|
}
|
|
|
|
func SetMinLogLevel(level LogLevel) error {
|
|
if _, exist := levelString[level]; ! exist {
|
|
return fmt.Errorf("Logger : ERROR : Level with value %d does not exist", level)
|
|
}
|
|
|
|
if level > maxLevel {
|
|
return fmt.Errorf("Logger : ERROR : Cannot set your Min LogLevel (%s) to be greater than the current Max (%s)", level, maxLevel)
|
|
}
|
|
|
|
minLevel = level
|
|
|
|
return nil
|
|
}
|
|
|
|
|