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 <stephen.day@docker.com>
This commit is contained in:
Stephen J Day 2016-03-09 22:40:35 -08:00
commit b8e1fa2e15
1 changed files with 37 additions and 0 deletions

37
log/context.go Normal file
View File

@ -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)
}