diff --git a/logger/logger.go b/logger/logger.go index 0af9a4c471731bb2b894b464efe64ae97fc325f5..353d6d1bf71e8311ba52b06df1a895fd24fd35f7 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -1,12 +1,14 @@ package logger import ( + "bytes" "encoding/json" "fmt" "io" "strings" "time" + "github.com/fatih/color" "gitlab.com/uafrica/go-utils/errors" ) @@ -102,20 +104,42 @@ func (l Logger) log(level Level, skip int, msg string) { // } // l.writer.Write(append(jsonEntry, []byte("\n")...)) - source := fmt.Sprintf("%s(%d)", entry.Caller.File, entry.Caller.Line) - if len(source) > 25 { - source = source[len(source)-25:] + source := fmt.Sprintf("%s/%s:%d", entry.Caller.Package, entry.Caller.File, entry.Caller.Line) + if len(source) > 40 { + source = source[len(source)-40:] } - textEntry := fmt.Sprintf("%s %5.5s %-25.25s %s", - entry.Timestamp.Format("2006-01-02 15:04:05"), - entry.Level, - source, - entry.Message) + + buffer := bytes.NewBuffer(nil) + red := color.New(color.FgRed).FprintfFunc() + magenta := color.New(color.FgMagenta).FprintfFunc() + yellow := color.New(color.FgYellow).FprintfFunc() + blue := color.New(color.FgBlue).FprintfFunc() + green := color.New(color.FgGreen).FprintfFunc() + cyan := color.New(color.FgCyan).FprintfFunc() + blue(buffer, entry.Timestamp.Format("2006-01-02 15:04:05")) + levelString := fmt.Sprintf(" %5.5s", entry.Level) + switch entry.Level { + case LevelFatal: + red(buffer, levelString) + case LevelError: + red(buffer, levelString) + case LevelWarn: + magenta(buffer, levelString) + case LevelInfo: + yellow(buffer, levelString) + case LevelDebug: + green(buffer, levelString) + } + cyan(buffer, fmt.Sprintf(" %-40.40s| ", source)) + + buffer.Write([]byte(entry.Message)) + if len(entry.Data) > 0 { jsonData, _ := json.Marshal(entry.Data) - textEntry += " " + string(jsonData) + green(buffer, " "+string(jsonData)) } - l.writer.Write(append([]byte(textEntry), []byte("\n")...)) + buffer.WriteString("\n") + l.writer.Write(buffer.Bytes()) } } diff --git a/logger/logs_test.go b/logger/logs_test.go index 0887d95059f36f44a56c9ff6bd7d8221912db5d0..8ebb965bd9b07f0309aa027cbc73caed5d74ed7c 100644 --- a/logger/logs_test.go +++ b/logger/logs_test.go @@ -4,6 +4,7 @@ import ( "os" "testing" + "github.com/fatih/color" "gitlab.com/uafrica/go-utils/errors" "gitlab.com/uafrica/go-utils/logger" ) @@ -34,3 +35,12 @@ func TestLogs(t *testing.T) { //logs.Errorf("Debugging %d!", 456) //logs.Error("Info") } + +func TestColor(t *testing.T) { + blue := color.New(color.FgBlue).FprintfFunc() + blue(os.Stdout, "important notice: %s", "ssss") + + // Mix up with multiple attributes + success := color.New(color.Bold, color.FgGreen).FprintlnFunc() + success(os.Stdout, " don't forget this...") +}