فهرست منبع

Merge pull request #8109 from unclejack/avoid_jsonlog_alloc

daemon/logs: avoid JSONLog struct alloc in loop
Tibor Vass 10 سال پیش
والد
کامیت
ac75835931
2فایلهای تغییر یافته به همراه12 افزوده شده و 6 حذف شده
  1. 4 4
      daemon/logs.go
  2. 8 2
      pkg/jsonlog/jsonlog.go

+ 4 - 4
daemon/logs.go

@@ -88,9 +88,8 @@ func (daemon *Daemon) ContainerLogs(job *engine.Job) engine.Status {
 				cLog = tmp
 			}
 			dec := json.NewDecoder(cLog)
+			l := &jsonlog.JSONLog{}
 			for {
-				l := &jsonlog.JSONLog{}
-
 				if err := dec.Decode(l); err == io.EOF {
 					break
 				} else if err != nil {
@@ -102,11 +101,12 @@ func (daemon *Daemon) ContainerLogs(job *engine.Job) engine.Status {
 					logLine = fmt.Sprintf("%s %s", l.Created.Format(format), logLine)
 				}
 				if l.Stream == "stdout" && stdout {
-					fmt.Fprintf(job.Stdout, "%s", logLine)
+					io.WriteString(job.Stdout, logLine)
 				}
 				if l.Stream == "stderr" && stderr {
-					fmt.Fprintf(job.Stderr, "%s", logLine)
+					io.WriteString(job.Stderr, logLine)
 				}
+				l.Reset()
 			}
 		}
 	}

+ 8 - 2
pkg/jsonlog/jsonlog.go

@@ -25,11 +25,16 @@ func (jl *JSONLog) Format(format string) (string, error) {
 	return fmt.Sprintf("[%s] %s", jl.Created.Format(format), jl.Log), nil
 }
 
+func (jl *JSONLog) Reset() {
+	jl.Log = ""
+	jl.Stream = ""
+	jl.Created = time.Time{}
+}
+
 func WriteLog(src io.Reader, dst io.Writer, format string) error {
 	dec := json.NewDecoder(src)
+	l := &JSONLog{}
 	for {
-		l := &JSONLog{}
-
 		if err := dec.Decode(l); err == io.EOF {
 			return nil
 		} else if err != nil {
@@ -43,5 +48,6 @@ func WriteLog(src io.Reader, dst io.Writer, format string) error {
 		if _, err := io.WriteString(dst, line); err != nil {
 			return err
 		}
+		l.Reset()
 	}
 }