Skip to content

Commit f4d10f3

Browse files
committed
Add an Atoi funtion for loglevel string conversion
1 parent f590a27 commit f4d10f3

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

log.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package log
22

3+
import (
4+
"fmt"
5+
"strings"
6+
)
7+
38
// Fields represents a map of key-value pairs where the value can be any Go
49
// type. The value must be able to be converted to a string.
510
type Fields map[string]interface{}
@@ -84,6 +89,32 @@ type Logger interface {
8489
Fatalw(msg string, fields Fields)
8590
}
8691

92+
// Atoi returns the loglevel integer associated with a common loglevel
93+
// string representation.
94+
func Atoi(loglevelStr string) (level int, err error) {
95+
switch strings.ToLower(loglevelStr) {
96+
case "trace":
97+
level = TraceLevel
98+
case "debug":
99+
level = DebugLevel
100+
case "info":
101+
level = InfoLevel
102+
case "warn":
103+
level = WarnLevel
104+
case "warning":
105+
level = WarnLevel
106+
case "error":
107+
level = ErrorLevel
108+
case "panic":
109+
level = PanicLevel
110+
case "fatal":
111+
level = FatalLevel
112+
default:
113+
err = fmt.Errorf("unknown loglevel: %s", loglevelStr)
114+
}
115+
return
116+
}
117+
87118
// Current contains the logger used for the package level logging functions
88119
var Current Logger
89120

log_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,29 @@ func TestInterface(t *testing.T) {
154154
buf.Reset()
155155
}
156156

157+
func TestAtoi(t *testing.T) {
158+
names := []string{"Trace", "Debug", "Info", "Warn", "Warning", "Error", "Panic", "Fatal"}
159+
levels := []int{TraceLevel, DebugLevel, InfoLevel, WarnLevel, WarnLevel, ErrorLevel, PanicLevel, FatalLevel}
160+
if len(names) != len(levels) {
161+
t.Fatal("inconsistent number of elements in test")
162+
}
163+
for n := range names {
164+
name := names[n]
165+
level := levels[n]
166+
testLevel, err := Atoi(name)
167+
if err != nil {
168+
t.Errorf("name to level translation returned: %v", err)
169+
}
170+
if testLevel != level {
171+
t.Errorf("incorrect loglevel (%d) set by name \"%s\"", level, name)
172+
}
173+
}
174+
_, err := Atoi("fakeName")
175+
if err == nil {
176+
t.Error("fake loglevel name failed to return an error")
177+
}
178+
}
179+
157180
type testLogger struct {
158181
logger *bytes.Buffer
159182
}

0 commit comments

Comments
 (0)