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 }