/* Using https://github.com/t-tomalak/logrus-easy-formatter/ as formatter */ package logger import ( "strings" "time" "github.com/sirupsen/logrus" ) const ( // Default log format will output [INFO]: 2006-01-02T15:04:05Z07:00 - Log message defaultLogFormat = "[%lvl%]: %time% - %msg%" defaultTimestampFormat = time.RFC3339 ) // Formatter implements logrus.Formatter interface. type Formatter struct { // Timestamp format TimestampFormat string // Available standard keys: time, msg, lvl // Also can include custom fields but limited to strings. // All of fields need to be wrapped inside %% i.e %time% %msg% LogFormat string // Disables the truncation of the level text to 4 characters. DisableLevelTruncation bool } // Format building log message. func (f *Formatter) Format(entry *logrus.Entry) ([]byte, error) { output := f.LogFormat if output == "" { output = defaultLogFormat } timestampFormat := f.TimestampFormat if timestampFormat == "" { timestampFormat = defaultTimestampFormat } output = strings.Replace(output, "%time%", entry.Time.Format(timestampFormat), 1) output = strings.Replace(output, "%msg%", entry.Message, 1) level := strings.ToUpper(entry.Level.String()) if !f.DisableLevelTruncation { level = level[:4] } output = strings.Replace(output, "%lvl%", level, 1) for k, v := range entry.Data { if s, ok := v.(string); ok { output = strings.Replace(output, "%"+k+"%", s, 1) } } output += "\n" return []byte(output), nil }