level.go

 1package log
 2
 3import (
 4	"errors"
 5	"fmt"
 6	"math"
 7	"strings"
 8)
 9
10// Level is a logging level.
11type Level int
12
13const (
14	// DebugLevel is the debug level.
15	DebugLevel Level = -4
16	// InfoLevel is the info level.
17	InfoLevel Level = 0
18	// WarnLevel is the warn level.
19	WarnLevel Level = 4
20	// ErrorLevel is the error level.
21	ErrorLevel Level = 8
22	// FatalLevel is the fatal level.
23	FatalLevel Level = 12
24	// noLevel is used with log.Print.
25	noLevel Level = math.MaxInt
26)
27
28// String returns the string representation of the level.
29func (l Level) String() string {
30	switch l {
31	case DebugLevel:
32		return "debug"
33	case InfoLevel:
34		return "info"
35	case WarnLevel:
36		return "warn"
37	case ErrorLevel:
38		return "error"
39	case FatalLevel:
40		return "fatal"
41	default:
42		return ""
43	}
44}
45
46// ErrInvalidLevel is an error returned when parsing an invalid level string.
47var ErrInvalidLevel = errors.New("invalid level")
48
49// ParseLevel converts level in string to Level type. Default level is InfoLevel.
50func ParseLevel(level string) (Level, error) {
51	switch strings.ToLower(level) {
52	case DebugLevel.String():
53		return DebugLevel, nil
54	case InfoLevel.String():
55		return InfoLevel, nil
56	case WarnLevel.String():
57		return WarnLevel, nil
58	case ErrorLevel.String():
59		return ErrorLevel, nil
60	case FatalLevel.String():
61		return FatalLevel, nil
62	default:
63		return 0, fmt.Errorf("%w: %q", ErrInvalidLevel, level)
64	}
65}