diff --git a/ranger_logger/logrus.go b/ranger_logger/logrus.go index ceba463..e145c6f 100644 --- a/ranger_logger/logrus.go +++ b/ranger_logger/logrus.go @@ -24,8 +24,9 @@ type LoggerInterface interface { //Wrapper - Wrap a logrus logger type Wrapper struct { - *logrus.Logger // see promoted methods https://www.goinggo.net/2015/09/composition-with-go.html, - AppData LoggerData // default fields + *logrus.Logger // see promoted methods https://www.goinggo.net/2015/09/composition-with-go.html, + DefaultData LoggerData // default fields + ExtraDataPrefix string } // JSONFormatter Wrapper for logrus.JSONFormatter @@ -65,7 +66,7 @@ func NewLogger(out io.Writer, appData LoggerData, f Formatter, logLevel string, } } - return &Wrapper{log, appData} + return &Wrapper{log, appData, ""} } //CreateFieldsFromRequest - Create a logrus.Fields object from a Request @@ -125,13 +126,26 @@ func convertToLogrusFields(loggerData LoggerData) logrus.Fields { func (logger *Wrapper) GetAllFieldsToLog(data LoggerData) LoggerData { result := make(LoggerData) - for k, v := range logger.AppData { + for k, v := range logger.DefaultData { result[k] = v } + ctx := LoggerData{} for k, v := range data { - result[k] = v + if _, ok := result[k]; !ok && logger.ExtraDataPrefix != "" { + ctx[k] = v + } else { + result[k] = v + } + } + + if len(ctx) > 0 { + result[logger.ExtraDataPrefix] = ctx } return result } + +func (logger *Wrapper) SetPrefix(p string) { + logger.ExtraDataPrefix = p +}