github.com/avenga/couper@v1.12.2/logging/hooks/json_color_formatter.go (about)

     1  package hooks
     2  
     3  import (
     4  	"regexp"
     5  
     6  	"github.com/fatih/color"
     7  	"github.com/sirupsen/logrus"
     8  )
     9  
    10  type JSONColorFormatter struct {
    11  	inner *logrus.JSONFormatter
    12  }
    13  
    14  func NewJSONColorFormatter(parent string, pretty bool) logrus.Formatter {
    15  	return &JSONColorFormatter{
    16  		inner: &logrus.JSONFormatter{
    17  			DataKey: parent,
    18  			FieldMap: logrus.FieldMap{
    19  				logrus.FieldKeyTime: "timestamp",
    20  				logrus.FieldKeyMsg:  "message",
    21  			},
    22  			PrettyPrint: pretty,
    23  		},
    24  	}
    25  }
    26  
    27  var keyRegex = regexp.MustCompile(`"(?:(?:[^"]|\\")*)"\s*:`)
    28  
    29  func (jcf *JSONColorFormatter) Format(entry *logrus.Entry) ([]byte, error) {
    30  	b, err := jcf.inner.Format(entry)
    31  	if !jcf.inner.PrettyPrint || err != nil {
    32  		return b, err
    33  	}
    34  
    35  	result := keyRegex.ReplaceAllFunc(b, func(needle []byte) []byte {
    36  		return []byte(color.HiGreenString("%s", string(needle)))
    37  	})
    38  
    39  	return result, err
    40  }