diff --git a/level.go b/level.go index cd4321c..ae07909 100644 --- a/level.go +++ b/level.go @@ -1,5 +1,7 @@ package log +import "strings" + // Level is a logging level. type Level int32 @@ -35,3 +37,21 @@ func (l Level) String() string { return "" } } + +// ParseLevel converts level in string to Level type. Default level is InfoLevel. +func ParseLevel(level string) Level { + switch strings.ToLower(level) { + case DebugLevel.String(): + return DebugLevel + case InfoLevel.String(): + return InfoLevel + case WarnLevel.String(): + return WarnLevel + case ErrorLevel.String(): + return ErrorLevel + case FatalLevel.String(): + return FatalLevel + default: + return InfoLevel + } +} diff --git a/level_test.go b/level_test.go index 2df9a0a..95d7bb5 100644 --- a/level_test.go +++ b/level_test.go @@ -10,3 +10,52 @@ func TestDefaultLevel(t *testing.T) { var level Level assert.Equal(t, InfoLevel, level) } +func TestParseLevel(t *testing.T) { + testCases := []struct { + name string + level string + expLevel Level + }{ + { + name: "Parse debug", + level: "debug", + expLevel: DebugLevel, + }, + { + name: "Parse info", + level: "Info", + expLevel: InfoLevel, + }, + { + name: "Parse warn", + level: "WARN", + expLevel: WarnLevel, + }, + { + name: "Parse error", + level: "error", + expLevel: ErrorLevel, + }, + { + name: "Parse fatal", + level: "FATAL", + expLevel: FatalLevel, + }, + { + name: "Default", + level: "", + expLevel: InfoLevel, + }, + { + name: "Wrong level, set INFO", + level: "WRONG_LEVEL", + expLevel: InfoLevel, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + assert.Equal(t, tc.expLevel, ParseLevel(tc.level)) + }) + } +}