2020-11-15 23:27:32 +01:00
|
|
|
package logger
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"github.com/sirupsen/logrus"
|
|
|
|
|
)
|
|
|
|
|
|
2020-11-15 23:48:43 +01:00
|
|
|
type contextKeyType string
|
|
|
|
|
|
|
|
|
|
const contextKey = contextKeyType("LogrusLoggerContext")
|
2020-11-15 23:27:32 +01:00
|
|
|
|
|
|
|
|
// GetLogger returns a logger from the context if one is available, otherwise a default logger
|
|
|
|
|
func GetLogger(ctx context.Context) *logrus.Logger {
|
2020-11-15 23:48:43 +01:00
|
|
|
if logger, ok := ctx.Value(contextKey).(logrus.Logger); ok {
|
2020-11-15 23:27:32 +01:00
|
|
|
return &logger
|
|
|
|
|
}
|
2020-11-15 23:48:43 +01:00
|
|
|
return newLogger(&logrus.JSONFormatter{}, logrus.InfoLevel)
|
2020-11-15 23:27:32 +01:00
|
|
|
}
|
|
|
|
|
|
2020-11-15 23:48:43 +01:00
|
|
|
// AddLogger adds a logger to the passed context
|
|
|
|
|
func AddLogger(ctx context.Context) context.Context {
|
|
|
|
|
return setLogger(ctx, &logrus.JSONFormatter{}, logrus.InfoLevel)
|
2020-11-15 23:27:32 +01:00
|
|
|
}
|
|
|
|
|
|
2020-11-15 23:48:43 +01:00
|
|
|
// AddDebugLogger adds a text-formatted debug logger to the passed context
|
|
|
|
|
func AddDebugLogger(ctx context.Context) context.Context {
|
|
|
|
|
return setLogger(ctx, &logrus.TextFormatter{}, logrus.DebugLevel)
|
2020-11-15 23:27:32 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SetLogger adds a logger to the supplied context
|
2020-11-15 23:48:43 +01:00
|
|
|
func setLogger(ctx context.Context, fmt logrus.Formatter, level logrus.Level) context.Context {
|
2020-11-15 23:27:32 +01:00
|
|
|
log := newLogger(fmt, level)
|
2020-11-15 23:48:43 +01:00
|
|
|
return context.WithValue(ctx, contextKey, log)
|
2020-11-15 23:27:32 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func newLogger(fmt logrus.Formatter, level logrus.Level) *logrus.Logger {
|
|
|
|
|
log := logrus.New()
|
|
|
|
|
|
|
|
|
|
log.SetFormatter(fmt)
|
|
|
|
|
log.SetLevel(level)
|
|
|
|
|
return log
|
2020-11-15 23:48:43 +01:00
|
|
|
}
|