Pārlūkot izejas kodu

Add styling control

Luis Figueiredo 8 gadi atpakaļ
vecāks
revīzija
2b3b901a37
2 mainītis faili ar 85 papildinājumiem un 11 dzēšanām
  1. 47 11
      prettylog.go
  2. 38 0
      style.go

+ 47 - 11
prettylog.go

@@ -3,15 +3,24 @@ package prettylog
 import (
 	"fmt"
 	"log"
+	"os"
 	"runtime"
 	"strings"
 	"time"
+
+	"golang.org/x/crypto/ssh/terminal"
+)
+
+var (
+	style = NewStyle()
 )
 
 type PrettyLogWritter struct {
 	prefix   string
 	lastTime time.Time
 	counter  int64
+
+	// Flags??
 }
 
 func NewWriter(prefix string) *PrettyLogWritter {
@@ -19,6 +28,19 @@ func NewWriter(prefix string) *PrettyLogWritter {
 }
 
 func (p *PrettyLogWritter) Write(b []byte) (int, error) {
+	if len(b) == 0 {
+		return 0, nil
+	}
+
+	originalLen := len(b)
+	parts := strings.Split(string(b), "\n")
+	if len(parts) > 2 {
+		for _, v := range parts {
+			p.Write([]byte(v))
+		}
+		return originalLen, nil
+	}
+	msg := parts[0]
 
 	/*{
 		for i := 0; i < 6; i++ {
@@ -35,25 +57,39 @@ func (p *PrettyLogWritter) Write(b []byte) (int, error) {
 
 	timeDiff := time.Since(p.lastTime)
 
-	var fduration float64 = float64(timeDiff.Nanoseconds()) / 1000000.0
+	fdurationSuf := "ms"
+	fduration := float64(timeDiff.Nanoseconds()) / 1000000.0
+	if fduration > 100 {
+		fduration /= 1000
+		fdurationSuf = "s"
+	}
 
 	prefixStr := ""
 	if p.prefix != "" {
-		prefixStr = "<\033[35m" + p.prefix + "\033[0m> "
+		prefixStr = fmt.Sprintf("%12s", p.prefix)
+	}
+
+	if !terminal.IsTerminal(int(os.Stderr.Fd())) {
+		style.Disabled = true
 	}
-	msg := fmt.Sprintf("[%d:\033[34m%s\033[0m (\033[33m%s:%d\033[0m) %s\033[90m+%.2f/ms\033[0m]: %s",
-		p.counter,
-		time.Now().Format("2006-01-02 15:04:05"),
-		fname,
-		line,
-		prefixStr,
-		fduration,
-		string(b),
+	//msg := fmt.Sprintf("[%d:\033[34m%s\033[0m (\033[33m%s:%d\033[0m) %s\033[90m+%.2f/ms\033[0m]: %s",
+	str := fmt.Sprintf("[%s %s]: %s %s %s\n",
+		style.Get("Time", time.Now().Format("2006-01-02 15:04:05")),
+		style.Get("Prefix", prefixStr),
+		style.Get("Message", msg),
+
+		style.Get("Duration", fmt.Sprintf("+%.2f/%s", fduration, fdurationSuf)),
+		style.GetX("File", fmt.Sprintf("%s:%d", fname, line)),
 	)
 	p.lastTime = time.Now()
 	p.counter++
 
-	return fmt.Print(msg)
+	n, err := os.Stderr.Write([]byte(str))
+	if err != nil {
+		return n, err
+	}
+
+	return originalLen, nil
 }
 
 func New(prefix string) *log.Logger {

+ 38 - 0
style.go

@@ -0,0 +1,38 @@
+/* Right now I only added necessary colors for logger */
+package prettylog
+
+type Style struct {
+	Disabled bool
+	stylmap  map[string]string
+}
+
+func NewStyle() *Style {
+	return &Style{
+		Disabled: false,
+		stylmap: map[string]string{
+			"Message":  "\033[01;37m",
+			"Prefix":   "\033[33m",
+			"Time":     "\033[34m",
+			"Duration": "\033[90m",
+			"File":     "\033[30m",
+		},
+	}
+}
+
+func (s *Style) color(code string, str string) string {
+	return code + str + "\033[0m"
+}
+
+func (s *Style) Get(str, msg string) string {
+	if s.Disabled {
+		return msg
+	}
+	return s.color(s.stylmap[str], msg)
+}
+
+func (s *Style) GetX(str, msg string) string {
+	if s.Disabled {
+		return ""
+	}
+	return s.Get(str, msg)
+}