3 | 3 |
|
4 | 4 |
// Error returns a logger that includes a Key/ErrorValue pair.
|
5 | 5 |
func Error(logger log.Logger) log.Logger {
|
6 | |
return log.NewContext(logger).WithPrefix(key, errorValue)
|
|
6 |
return log.NewContext(logger).WithPrefix(Key(), ErrorValue())
|
7 | 7 |
}
|
8 | 8 |
|
9 | 9 |
// Warn returns a logger that includes a Key/WarnValue pair.
|
10 | 10 |
func Warn(logger log.Logger) log.Logger {
|
11 | |
return log.NewContext(logger).WithPrefix(key, warnValue)
|
|
11 |
return log.NewContext(logger).WithPrefix(Key(), WarnValue())
|
12 | 12 |
}
|
13 | 13 |
|
14 | 14 |
// Info returns a logger that includes a Key/InfoValue pair.
|
15 | 15 |
func Info(logger log.Logger) log.Logger {
|
16 | |
return log.NewContext(logger).WithPrefix(key, infoValue)
|
|
16 |
return log.NewContext(logger).WithPrefix(Key(), InfoValue())
|
17 | 17 |
}
|
18 | 18 |
|
19 | 19 |
// Debug returns a logger that includes a Key/DebugValue pair.
|
20 | 20 |
func Debug(logger log.Logger) log.Logger {
|
21 | |
return log.NewContext(logger).WithPrefix(key, debugValue)
|
|
21 |
return log.NewContext(logger).WithPrefix(Key(), DebugValue())
|
22 | 22 |
}
|
23 | 23 |
|
24 | 24 |
// NewFilter wraps next and implements level filtering. See the commentary on
|
|
122 | 122 |
return func(l *logger) { l.errNoLevel = err }
|
123 | 123 |
}
|
124 | 124 |
|
|
125 |
// NewInjector wraps next and returns a logger that adds a Key/level pair to
|
|
126 |
// the beginning of log events that don't already contain a level.
|
125 | 127 |
func NewInjector(next log.Logger, level Value) log.Logger {
|
126 | 128 |
return &injector{
|
127 | 129 |
next: next,
|
|
146 | 148 |
return l.next.Log(kvs...)
|
147 | 149 |
}
|
148 | 150 |
|
|
151 |
// Value is the interface that each of the canonical level values implement.
|
|
152 |
// It contains unexported methods that prevent types from other packages from
|
|
153 |
// implementing it and guaranteeing that NewFilter can distinguish the levels
|
|
154 |
// defined in this package from all other values.
|
149 | 155 |
type Value interface {
|
150 | 156 |
String() string
|
151 | 157 |
levelVal()
|
152 | 158 |
}
|
153 | 159 |
|
154 | |
func Key() interface{} { return key }
|
|
160 |
// Key returns the unique key added to log events by the loggers in this
|
|
161 |
// package.
|
|
162 |
func Key() interface{} { return key }
|
|
163 |
|
|
164 |
// ErrorValue returns the unique value added to log events by Error.
|
155 | 165 |
func ErrorValue() Value { return errorValue }
|
156 | |
func WarnValue() Value { return warnValue }
|
157 | |
func InfoValue() Value { return infoValue }
|
|
166 |
|
|
167 |
// WarnValue returns the unique value added to log events by Warn.
|
|
168 |
func WarnValue() Value { return warnValue }
|
|
169 |
|
|
170 |
// InfoValue returns the unique value added to log events by Info.
|
|
171 |
func InfoValue() Value { return infoValue }
|
|
172 |
|
|
173 |
// DebugValue returns the unique value added to log events by Warn.
|
158 | 174 |
func DebugValue() Value { return debugValue }
|
159 | 175 |
|
160 | 176 |
var (
|
161 | |
key interface{} = "level"
|
162 | |
errorValue = &levelValue{level: levelError, name: "error"}
|
163 | |
warnValue = &levelValue{level: levelWarn, name: "warn"}
|
164 | |
infoValue = &levelValue{level: levelInfo, name: "info"}
|
165 | |
debugValue = &levelValue{level: levelDebug, name: "debug"}
|
|
177 |
// key is of type interfae{} so that it allocates once during package
|
|
178 |
// initialization and avoids allocating every type the value is added to a
|
|
179 |
// []interface{} later.
|
|
180 |
key interface{} = "level"
|
|
181 |
|
|
182 |
errorValue = &levelValue{level: levelError, name: "error"}
|
|
183 |
warnValue = &levelValue{level: levelWarn, name: "warn"}
|
|
184 |
infoValue = &levelValue{level: levelInfo, name: "info"}
|
|
185 |
debugValue = &levelValue{level: levelDebug, name: "debug"}
|
166 | 186 |
)
|
167 | 187 |
|
168 | 188 |
type level byte
|