From b8e1fa2e1554e8536a42c911a2b3faed42b367f0 Mon Sep 17 00:00:00 2001 From: Stephen J Day Date: Wed, 9 Mar 2016 22:40:35 -0800 Subject: [PATCH] log: provide simple context logging We consolidate simple context logging for use across packages. For now, one still needs logrus, but we can take this further and avoid the import at a later time. Signed-off-by: Stephen J Day --- log/context.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 log/context.go diff --git a/log/context.go b/log/context.go new file mode 100644 index 0000000..b919e35 --- /dev/null +++ b/log/context.go @@ -0,0 +1,37 @@ +package log + +import ( + "github.com/Sirupsen/logrus" + "golang.org/x/net/context" +) + +var ( + // G is an alias for GetLogger. + // + // We may want to define this locally to a package to get package tagged log + // messages. + G = GetLogger + + // L is an alias for the the standard logger. + L = logrus.NewEntry(logrus.StandardLogger()) +) + +type loggerKey struct{} + +// WithLogger returns a new context with the provided logger. Use in +// combination with logger.WithField(s) for great effect. +func WithLogger(ctx context.Context, logger *logrus.Entry) context.Context { + return context.WithValue(ctx, loggerKey{}, logger) +} + +// GetLogger retrieves the current logger from the context. If no logger is +// available, the default logger is returned. +func GetLogger(ctx context.Context) *logrus.Entry { + logger := ctx.Value(loggerKey{}) + + if logger == nil { + return L + } + + return logger.(*logrus.Entry) +}