@@ -811,10 +811,8 @@ func (u *ContainerService) StreamLogs(ctx *gin.Context, params dto.StreamLog) {
811811 }
812812 return true
813813 case err := <- errorChan :
814- _ , err = fmt .Fprintf (w , "data: {\" event\" : \" error\" , \" data\" : \" %s\" }\n \n " , err .Error ())
815- if err != nil {
816- return false
817- }
814+ errorMsg := fmt .Sprintf ("event: error\n data: %v\n \n " , err .Error ())
815+ _ , err = fmt .Fprintf (w , errorMsg )
818816 return false
819817 case <- ctx .Request .Context ().Done ():
820818 return false
@@ -843,14 +841,19 @@ func collectLogs(params dto.StreamLog, messageChan chan<- string, errorChan chan
843841 if params .Container != "" {
844842 cmdArgs = append (cmdArgs , params .Container )
845843 }
846- cmd := exec .Command ("docker" , cmdArgs ... )
844+ dockerCmd := exec .Command ("docker" , cmdArgs ... )
847845
848- stdout , err := cmd .StdoutPipe ()
846+ stdout , err := dockerCmd .StdoutPipe ()
849847 if err != nil {
850848 errorChan <- fmt .Errorf ("failed to get stdout pipe: %v" , err )
851849 return
852850 }
853- if err := cmd .Start (); err != nil {
851+ stderr , err := dockerCmd .StderrPipe ()
852+ if err != nil {
853+ errorChan <- fmt .Errorf ("failed to get stderr pipe: %v" , err )
854+ return
855+ }
856+ if err = dockerCmd .Start (); err != nil {
854857 errorChan <- fmt .Errorf ("failed to start command: %v" , err )
855858 return
856859 }
@@ -869,11 +872,20 @@ func collectLogs(params dto.StreamLog, messageChan chan<- string, errorChan chan
869872 }
870873 }
871874
872- if err : = scanner .Err (); err != nil {
875+ if err = scanner .Err (); err != nil {
873876 errorChan <- fmt .Errorf ("scanner error: %v" , err )
874877 return
875878 }
876- cmd .Wait ()
879+
880+ errScanner := bufio .NewScanner (stderr )
881+ for errScanner .Scan () {
882+ line := errScanner .Text ()
883+ errorChan <- fmt .Errorf ("%v" , line )
884+ }
885+ if err = dockerCmd .Wait (); err != nil {
886+ errorChan <- fmt .Errorf ("%v" , err )
887+ return
888+ }
877889}
878890
879891func (u * ContainerService ) DownloadContainerLogs (containerType , container , since , tail string , c * gin.Context ) error {
0 commit comments