2019-11-13 11:19:04 -05:00
package elektronLogging
import (
"bytes"
2019-11-20 13:33:46 -05:00
"github.com/fatih/color"
2019-11-21 14:12:53 -05:00
log "github.com/sirupsen/logrus"
2019-11-13 11:19:04 -05:00
"strings"
)
type ElektronFormatter struct {
TimestampFormat string
}
2019-11-21 14:12:53 -05:00
func ( f ElektronFormatter ) getColor ( entry * log . Entry ) * color . Color {
2019-11-20 13:33:46 -05:00
switch entry . Level {
2019-11-21 14:12:53 -05:00
case log . InfoLevel :
2019-11-20 13:33:46 -05:00
return color . New ( color . FgGreen , color . Bold )
2019-11-21 14:12:53 -05:00
case log . WarnLevel :
2019-11-20 13:33:46 -05:00
return color . New ( color . FgYellow , color . Bold )
2019-11-21 14:12:53 -05:00
case log . ErrorLevel :
2019-11-20 13:33:46 -05:00
return color . New ( color . FgRed , color . Bold )
2019-11-21 14:12:53 -05:00
case log . FatalLevel :
2019-11-20 13:33:46 -05:00
return color . New ( color . FgRed , color . Bold )
default :
return color . New ( color . FgWhite , color . Bold )
}
2019-11-13 11:19:04 -05:00
}
2019-11-21 14:12:53 -05:00
func ( f ElektronFormatter ) Format ( entry * log . Entry ) ( [ ] byte , error ) {
2019-11-13 11:19:04 -05:00
var b * bytes . Buffer
if entry . Buffer != nil {
b = entry . Buffer
} else {
b = & bytes . Buffer { }
}
2019-11-20 13:33:46 -05:00
levelColor := f . getColor ( entry )
level := levelColor . Sprintf ( "[%s]:" , strings . ToUpper ( entry . Level . String ( ) ) )
2019-11-20 16:11:33 -05:00
message := strings . Join ( [ ] string { level , entry . Time . Format ( f . TimestampFormat ) , entry . Message , " " } , " " )
2019-11-13 11:19:04 -05:00
var formattedFields [ ] string
for key , value := range entry . Data {
2019-11-26 13:19:15 -05:00
formattedFields = append ( formattedFields , strings . Join ( [ ] string { key , value . ( string ) } , "=" ) )
2019-11-13 11:19:04 -05:00
}
2019-11-20 13:33:46 -05:00
2019-11-13 11:19:04 -05:00
b . WriteString ( message )
b . WriteString ( strings . Join ( formattedFields , ", " ) )
b . WriteByte ( '\n' )
return b . Bytes ( ) , nil
}