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...")
+}