diff --git a/daemon/logs.go b/daemon/logs.go index b5cf86fcb6..6925cabacb 100644 --- a/daemon/logs.go +++ b/daemon/logs.go @@ -114,12 +114,14 @@ func (daemon *Daemon) ContainerLogs(job *engine.Job) engine.Status { errors := make(chan error, 2) if stdout { stdoutPipe := container.StdoutLogPipe() + defer stdoutPipe.Close() go func() { errors <- jsonlog.WriteLog(stdoutPipe, job.Stdout, format) }() } if stderr { stderrPipe := container.StderrLogPipe() + defer stderrPipe.Close() go func() { errors <- jsonlog.WriteLog(stderrPipe, job.Stderr, format) }() diff --git a/pkg/jsonlog/jsonlog.go b/pkg/jsonlog/jsonlog.go index ecf4457cf9..16d015fcd1 100644 --- a/pkg/jsonlog/jsonlog.go +++ b/pkg/jsonlog/jsonlog.go @@ -25,7 +25,7 @@ func (jl *JSONLog) Format(format string) (string, error) { return fmt.Sprintf("[%s] %s", jl.Created.Format(format), jl.Log), nil } -func WriteLog(src io.Reader, dst io.WriteCloser, format string) error { +func WriteLog(src io.Reader, dst io.Writer, format string) error { dec := json.NewDecoder(src) for { l := &JSONLog{} @@ -40,6 +40,8 @@ func WriteLog(src io.Reader, dst io.WriteCloser, format string) error { if err != nil { return err } - fmt.Fprintf(dst, "%s", line) + if _, err := io.WriteString(dst, line); err != nil { + return err + } } }