prettylog.go 871 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package prettylog
  2. import (
  3. "fmt"
  4. "log"
  5. "runtime"
  6. "strings"
  7. "time"
  8. )
  9. type PrettyLogWritter struct {
  10. lastTime time.Time
  11. counter int64
  12. }
  13. func New() *PrettyLogWritter {
  14. return &PrettyLogWritter{time.Now(), 0}
  15. }
  16. func (this *PrettyLogWritter) Write(b []byte) (int, error) {
  17. ptr, _, line, _ := runtime.Caller(3)
  18. tname := runtime.FuncForPC(ptr).Name()
  19. li := strings.LastIndex(tname, "/")
  20. fname := tname[li+1:]
  21. timeDiff := time.Since(this.lastTime)
  22. var fduration float64 = float64(timeDiff.Nanoseconds()) / 1000000.0
  23. msg := fmt.Sprintf("[%d:\033[34m%s\033[0m (\033[33m%s:%d\033[0m) \033[90m+%.2f/ms\033[0m]: %s",
  24. this.counter,
  25. time.Now().Format("2006-01-02 15:04:05"),
  26. fname,
  27. line,
  28. fduration,
  29. string(b),
  30. )
  31. this.lastTime = time.Now()
  32. this.counter++
  33. return fmt.Print(msg)
  34. }
  35. func CreateLogger() *log.Logger {
  36. return log.New(New(), "", 0)
  37. }