44 lines
751 B
Go
44 lines
751 B
Go
package logging
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"time"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type ctxKey int
|
|
|
|
const loggerCtxKey ctxKey = iota
|
|
|
|
type Logger logrus.FieldLogger
|
|
|
|
func New() *logrus.Logger {
|
|
logger := logrus.New()
|
|
logger.SetLevel(logrus.InfoLevel)
|
|
logger.SetFormatter(&logrus.TextFormatter{
|
|
FullTimestamp: true,
|
|
TimestampFormat: time.RFC3339Nano,
|
|
})
|
|
return logger
|
|
}
|
|
|
|
func WithLogger(ctx context.Context, logger Logger) context.Context {
|
|
return context.WithValue(ctx, loggerCtxKey, logger)
|
|
}
|
|
|
|
func NullLogger() Logger {
|
|
log := logrus.New()
|
|
log.SetOutput(io.Discard)
|
|
return log
|
|
}
|
|
|
|
func LoggerFromContext(ctx context.Context) Logger {
|
|
logger, ok := ctx.Value(loggerCtxKey).(Logger)
|
|
if ok {
|
|
return logger
|
|
}
|
|
return NullLogger()
|
|
}
|