prettylog.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. /*{
  18. for i := 0; i < 6; i++ {
  19. ptr, _, _, _ := runtime.Caller(i)
  20. fname := runtime.FuncForPC(ptr).Name()
  21. fmt.Println("Stack:", fname)
  22. }
  23. }*/
  24. ptr, _, line, _ := runtime.Caller(3)
  25. tname := runtime.FuncForPC(ptr).Name()
  26. li := strings.LastIndex(tname, "/")
  27. fname := tname[li+1:]
  28. timeDiff := time.Since(this.lastTime)
  29. var fduration float64 = float64(timeDiff.Nanoseconds()) / 1000000.0
  30. msg := fmt.Sprintf("[%d:\033[34m%s\033[0m (\033[33m%s:%d\033[0m) \033[90m+%.2f/ms\033[0m]: %s",
  31. this.counter,
  32. time.Now().Format("2006-01-02 15:04:05"),
  33. fname,
  34. line,
  35. fduration,
  36. string(b),
  37. )
  38. this.lastTime = time.Now()
  39. this.counter++
  40. return fmt.Print(msg)
  41. }
  42. func CreateLogger() *log.Logger {
  43. return log.New(New(), "", 0)
  44. }