1 | package logrus
|
---|
2 |
|
---|
3 | import (
|
---|
4 | "fmt"
|
---|
5 | "log"
|
---|
6 | "strings"
|
---|
7 | )
|
---|
8 |
|
---|
9 | // Fields type, used to pass to `WithFields`.
|
---|
10 | type Fields map[string]interface{}
|
---|
11 |
|
---|
12 | // Level type
|
---|
13 | type Level uint32
|
---|
14 |
|
---|
15 | // Convert the Level to a string. E.g. PanicLevel becomes "panic".
|
---|
16 | func (level Level) String() string {
|
---|
17 | if b, err := level.MarshalText(); err == nil {
|
---|
18 | return string(b)
|
---|
19 | } else {
|
---|
20 | return "unknown"
|
---|
21 | }
|
---|
22 | }
|
---|
23 |
|
---|
24 | // ParseLevel takes a string level and returns the Logrus log level constant.
|
---|
25 | func ParseLevel(lvl string) (Level, error) {
|
---|
26 | switch strings.ToLower(lvl) {
|
---|
27 | case "panic":
|
---|
28 | return PanicLevel, nil
|
---|
29 | case "fatal":
|
---|
30 | return FatalLevel, nil
|
---|
31 | case "error":
|
---|
32 | return ErrorLevel, nil
|
---|
33 | case "warn", "warning":
|
---|
34 | return WarnLevel, nil
|
---|
35 | case "info":
|
---|
36 | return InfoLevel, nil
|
---|
37 | case "debug":
|
---|
38 | return DebugLevel, nil
|
---|
39 | case "trace":
|
---|
40 | return TraceLevel, nil
|
---|
41 | }
|
---|
42 |
|
---|
43 | var l Level
|
---|
44 | return l, fmt.Errorf("not a valid logrus Level: %q", lvl)
|
---|
45 | }
|
---|
46 |
|
---|
47 | // UnmarshalText implements encoding.TextUnmarshaler.
|
---|
48 | func (level *Level) UnmarshalText(text []byte) error {
|
---|
49 | l, err := ParseLevel(string(text))
|
---|
50 | if err != nil {
|
---|
51 | return err
|
---|
52 | }
|
---|
53 |
|
---|
54 | *level = l
|
---|
55 |
|
---|
56 | return nil
|
---|
57 | }
|
---|
58 |
|
---|
59 | func (level Level) MarshalText() ([]byte, error) {
|
---|
60 | switch level {
|
---|
61 | case TraceLevel:
|
---|
62 | return []byte("trace"), nil
|
---|
63 | case DebugLevel:
|
---|
64 | return []byte("debug"), nil
|
---|
65 | case InfoLevel:
|
---|
66 | return []byte("info"), nil
|
---|
67 | case WarnLevel:
|
---|
68 | return []byte("warning"), nil
|
---|
69 | case ErrorLevel:
|
---|
70 | return []byte("error"), nil
|
---|
71 | case FatalLevel:
|
---|
72 | return []byte("fatal"), nil
|
---|
73 | case PanicLevel:
|
---|
74 | return []byte("panic"), nil
|
---|
75 | }
|
---|
76 |
|
---|
77 | return nil, fmt.Errorf("not a valid logrus level %d", level)
|
---|
78 | }
|
---|
79 |
|
---|
80 | // A constant exposing all logging levels
|
---|
81 | var AllLevels = []Level{
|
---|
82 | PanicLevel,
|
---|
83 | FatalLevel,
|
---|
84 | ErrorLevel,
|
---|
85 | WarnLevel,
|
---|
86 | InfoLevel,
|
---|
87 | DebugLevel,
|
---|
88 | TraceLevel,
|
---|
89 | }
|
---|
90 |
|
---|
91 | // These are the different logging levels. You can set the logging level to log
|
---|
92 | // on your instance of logger, obtained with `logrus.New()`.
|
---|
93 | const (
|
---|
94 | // PanicLevel level, highest level of severity. Logs and then calls panic with the
|
---|
95 | // message passed to Debug, Info, ...
|
---|
96 | PanicLevel Level = iota
|
---|
97 | // FatalLevel level. Logs and then calls `logger.Exit(1)`. It will exit even if the
|
---|
98 | // logging level is set to Panic.
|
---|
99 | FatalLevel
|
---|
100 | // ErrorLevel level. Logs. Used for errors that should definitely be noted.
|
---|
101 | // Commonly used for hooks to send errors to an error tracking service.
|
---|
102 | ErrorLevel
|
---|
103 | // WarnLevel level. Non-critical entries that deserve eyes.
|
---|
104 | WarnLevel
|
---|
105 | // InfoLevel level. General operational entries about what's going on inside the
|
---|
106 | // application.
|
---|
107 | InfoLevel
|
---|
108 | // DebugLevel level. Usually only enabled when debugging. Very verbose logging.
|
---|
109 | DebugLevel
|
---|
110 | // TraceLevel level. Designates finer-grained informational events than the Debug.
|
---|
111 | TraceLevel
|
---|
112 | )
|
---|
113 |
|
---|
114 | // Won't compile if StdLogger can't be realized by a log.Logger
|
---|
115 | var (
|
---|
116 | _ StdLogger = &log.Logger{}
|
---|
117 | _ StdLogger = &Entry{}
|
---|
118 | _ StdLogger = &Logger{}
|
---|
119 | )
|
---|
120 |
|
---|
121 | // StdLogger is what your logrus-enabled library should take, that way
|
---|
122 | // it'll accept a stdlib logger and a logrus logger. There's no standard
|
---|
123 | // interface, this is the closest we get, unfortunately.
|
---|
124 | type StdLogger interface {
|
---|
125 | Print(...interface{})
|
---|
126 | Printf(string, ...interface{})
|
---|
127 | Println(...interface{})
|
---|
128 |
|
---|
129 | Fatal(...interface{})
|
---|
130 | Fatalf(string, ...interface{})
|
---|
131 | Fatalln(...interface{})
|
---|
132 |
|
---|
133 | Panic(...interface{})
|
---|
134 | Panicf(string, ...interface{})
|
---|
135 | Panicln(...interface{})
|
---|
136 | }
|
---|
137 |
|
---|
138 | // The FieldLogger interface generalizes the Entry and Logger types
|
---|
139 | type FieldLogger interface {
|
---|
140 | WithField(key string, value interface{}) *Entry
|
---|
141 | WithFields(fields Fields) *Entry
|
---|
142 | WithError(err error) *Entry
|
---|
143 |
|
---|
144 | Debugf(format string, args ...interface{})
|
---|
145 | Infof(format string, args ...interface{})
|
---|
146 | Printf(format string, args ...interface{})
|
---|
147 | Warnf(format string, args ...interface{})
|
---|
148 | Warningf(format string, args ...interface{})
|
---|
149 | Errorf(format string, args ...interface{})
|
---|
150 | Fatalf(format string, args ...interface{})
|
---|
151 | Panicf(format string, args ...interface{})
|
---|
152 |
|
---|
153 | Debug(args ...interface{})
|
---|
154 | Info(args ...interface{})
|
---|
155 | Print(args ...interface{})
|
---|
156 | Warn(args ...interface{})
|
---|
157 | Warning(args ...interface{})
|
---|
158 | Error(args ...interface{})
|
---|
159 | Fatal(args ...interface{})
|
---|
160 | Panic(args ...interface{})
|
---|
161 |
|
---|
162 | Debugln(args ...interface{})
|
---|
163 | Infoln(args ...interface{})
|
---|
164 | Println(args ...interface{})
|
---|
165 | Warnln(args ...interface{})
|
---|
166 | Warningln(args ...interface{})
|
---|
167 | Errorln(args ...interface{})
|
---|
168 | Fatalln(args ...interface{})
|
---|
169 | Panicln(args ...interface{})
|
---|
170 |
|
---|
171 | // IsDebugEnabled() bool
|
---|
172 | // IsInfoEnabled() bool
|
---|
173 | // IsWarnEnabled() bool
|
---|
174 | // IsErrorEnabled() bool
|
---|
175 | // IsFatalEnabled() bool
|
---|
176 | // IsPanicEnabled() bool
|
---|
177 | }
|
---|
178 |
|
---|
179 | // Ext1FieldLogger (the first extension to FieldLogger) is superfluous, it is
|
---|
180 | // here for consistancy. Do not use. Use Logger or Entry instead.
|
---|
181 | type Ext1FieldLogger interface {
|
---|
182 | FieldLogger
|
---|
183 | Tracef(format string, args ...interface{})
|
---|
184 | Trace(args ...interface{})
|
---|
185 | Traceln(args ...interface{})
|
---|
186 | }
|
---|