jsonlog.go 1014 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package jsonlog
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io"
  6. "time"
  7. log "github.com/Sirupsen/logrus"
  8. )
  9. type JSONLog struct {
  10. Log string `json:"log,omitempty"`
  11. Stream string `json:"stream,omitempty"`
  12. Created time.Time `json:"time"`
  13. }
  14. func (jl *JSONLog) Format(format string) (string, error) {
  15. if format == "" {
  16. return jl.Log, nil
  17. }
  18. if format == "json" {
  19. m, err := json.Marshal(jl)
  20. return string(m), err
  21. }
  22. return fmt.Sprintf("[%s] %s", jl.Created.Format(format), jl.Log), nil
  23. }
  24. func (jl *JSONLog) Reset() {
  25. jl.Log = ""
  26. jl.Stream = ""
  27. jl.Created = time.Time{}
  28. }
  29. func WriteLog(src io.Reader, dst io.Writer, format string) error {
  30. dec := json.NewDecoder(src)
  31. l := &JSONLog{}
  32. for {
  33. if err := dec.Decode(l); err == io.EOF {
  34. return nil
  35. } else if err != nil {
  36. log.Printf("Error streaming logs: %s", err)
  37. return err
  38. }
  39. line, err := l.Format(format)
  40. if err != nil {
  41. return err
  42. }
  43. if _, err := io.WriteString(dst, line); err != nil {
  44. return err
  45. }
  46. l.Reset()
  47. }
  48. }