2019-11-13 11:19:04 -05:00
package elektronLogging
import (
"bytes"
"fmt"
2019-11-20 13:33:46 -05:00
"github.com/fatih/color"
log "github.com/sirupsen/logrus"
2019-11-13 11:19:04 -05:00
"strings"
)
type ElektronFormatter struct {
TimestampFormat string
}
func ( f ElektronFormatter ) getColor ( entry * log . Entry ) * color . Color {
2019-11-20 13:33:46 -05:00
switch entry . Level {
case log . InfoLevel :
return color . New ( color . FgGreen , color . Bold )
case log . WarnLevel :
return color . New ( color . FgYellow , color . Bold )
case log . ErrorLevel :
return color . New ( color . FgRed , color . Bold )
case log . FatalLevel :
return color . New ( color . FgRed , color . Bold )
default :
return color . New ( color . FgWhite , color . Bold )
}
2019-11-13 11:19:04 -05:00
}
func ( f ElektronFormatter ) Format ( entry * log . Entry ) ( [ ] byte , error ) {
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 ( ) ) )
message := fmt . Sprintf ( "%s %s " , level , entry . Time . Format ( f . TimestampFormat ) )
if entry . Message != "" {
message = fmt . Sprintf ( "%s %s %s " , 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-20 13:33:46 -05:00
formattedFields = append ( formattedFields ,
strings . Join ( [ ] string { key , fmt . Sprintf ( "%s" , value ) } , "=" ) )
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
}