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}