log: Include configured fields in all logs
It's possible to configure log fields in the configuration file, and we would like these fields to be included in all logs. Previously these fields were included only in logs produced using the main routine's context, meaning that any logs from a request handler were missing the fields since those use a context based on the HTTP request's context. Add a configurable default logger to the `context` package, and set it when configuring logging at startup time. Signed-off-by: Adam Wolfe Gordon <awg@digitalocean.com>
This commit is contained in:
parent
90e62ac24c
commit
43e502590f
3 changed files with 81 additions and 3 deletions
|
@ -4,10 +4,16 @@ import (
|
|||
"context"
|
||||
"fmt"
|
||||
"runtime"
|
||||
"sync"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
var (
|
||||
defaultLogger *logrus.Entry = logrus.StandardLogger().WithField("go.version", runtime.Version())
|
||||
defaultLoggerMu sync.RWMutex
|
||||
)
|
||||
|
||||
// Logger provides a leveled-logging interface.
|
||||
type Logger interface {
|
||||
// standard logger methods
|
||||
|
@ -80,6 +86,18 @@ func GetLogger(ctx context.Context, keys ...interface{}) Logger {
|
|||
return getLogrusLogger(ctx, keys...)
|
||||
}
|
||||
|
||||
// SetDefaultLogger sets the default logger upon which to base new loggers.
|
||||
func SetDefaultLogger(logger Logger) {
|
||||
entry, ok := logger.(*logrus.Entry)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
defaultLoggerMu.Lock()
|
||||
defaultLogger = entry
|
||||
defaultLoggerMu.Unlock()
|
||||
}
|
||||
|
||||
// GetLogrusLogger returns the logrus logger for the context. If one more keys
|
||||
// are provided, they will be resolved on the context and included in the
|
||||
// logger. Only use this function if specific logrus functionality is
|
||||
|
@ -104,9 +122,9 @@ func getLogrusLogger(ctx context.Context, keys ...interface{}) *logrus.Entry {
|
|||
fields["instance.id"] = instanceID
|
||||
}
|
||||
|
||||
fields["go.version"] = runtime.Version()
|
||||
// If no logger is found, just return the standard logger.
|
||||
logger = logrus.StandardLogger().WithFields(fields)
|
||||
defaultLoggerMu.RLock()
|
||||
logger = defaultLogger.WithFields(fields)
|
||||
defaultLoggerMu.RUnlock()
|
||||
}
|
||||
|
||||
fields := logrus.Fields{}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue