2018-09-28 00:28:33 -04:00
|
|
|
package logging
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
2018-09-28 21:04:16 -04:00
|
|
|
"io"
|
2019-08-02 23:28:25 -04:00
|
|
|
|
|
|
|
"github.com/rs/zerolog"
|
2018-09-28 00:28:33 -04:00
|
|
|
)
|
|
|
|
|
2018-09-28 21:04:16 -04:00
|
|
|
type (
|
2021-09-02 11:09:48 -04:00
|
|
|
Level int8
|
2018-09-28 21:04:16 -04:00
|
|
|
|
|
|
|
Options struct {
|
|
|
|
Writer io.Writer
|
|
|
|
Level Level
|
2019-08-02 23:28:25 -04:00
|
|
|
Fields map[string]interface{}
|
2018-09-28 21:04:16 -04:00
|
|
|
}
|
|
|
|
)
|
2018-09-28 00:28:33 -04:00
|
|
|
|
|
|
|
const (
|
|
|
|
DebugLevel Level = iota
|
|
|
|
InfoLevel
|
|
|
|
WarnLevel
|
|
|
|
ErrorLevel
|
|
|
|
FatalLevel
|
|
|
|
PanicLevel
|
|
|
|
NoLevel
|
|
|
|
Disabled
|
2021-09-02 11:09:48 -04:00
|
|
|
|
|
|
|
TraceLevel Level = -1
|
2018-09-28 00:28:33 -04:00
|
|
|
)
|
|
|
|
|
2021-09-02 11:09:48 -04:00
|
|
|
func ParseLevel(input string) (Level, error) {
|
|
|
|
lvl, err := zerolog.ParseLevel(input)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return NoLevel, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return Level(lvl), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func MustParseLevel(input string) Level {
|
|
|
|
lvl, err := zerolog.ParseLevel(input)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return Level(lvl)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (l Level) String() string {
|
|
|
|
return zerolog.Level(l).String()
|
|
|
|
}
|
|
|
|
|
2019-08-02 23:28:25 -04:00
|
|
|
func WithContext(ctx context.Context, opts Options) context.Context {
|
|
|
|
c := zerolog.New(opts.Writer).With().Timestamp()
|
2018-09-28 21:04:16 -04:00
|
|
|
|
2019-08-02 23:28:25 -04:00
|
|
|
for k, v := range opts.Fields {
|
|
|
|
c = c.Interface(k, v)
|
2018-09-28 21:04:16 -04:00
|
|
|
}
|
|
|
|
|
2021-09-02 11:09:48 -04:00
|
|
|
logger := c.Logger().Level(zerolog.Level(opts.Level))
|
2018-09-28 21:04:16 -04:00
|
|
|
|
|
|
|
return logger.WithContext(ctx)
|
|
|
|
}
|
|
|
|
|
2021-09-02 11:09:48 -04:00
|
|
|
func FromContext(ctx context.Context) zerolog.Logger {
|
|
|
|
found := zerolog.Ctx(ctx)
|
|
|
|
|
|
|
|
if found == nil {
|
|
|
|
panic("logger is not set")
|
|
|
|
}
|
|
|
|
|
|
|
|
return *found
|
|
|
|
}
|
|
|
|
|
|
|
|
func WithName(ctx zerolog.Context, name string) zerolog.Context {
|
|
|
|
return ctx.Str("component", name)
|
2018-09-28 00:28:33 -04:00
|
|
|
}
|