diff --git a/pkg/driver/custom/custom.go b/pkg/driver/custom/custom.go
index 218409750..fa08b2b08 100644
--- a/pkg/driver/custom/custom.go
+++ b/pkg/driver/custom/custom.go
@@ -7,6 +7,7 @@ import (
 	"fmt"
 	"io"
 	"strings"
+	"time"
 
 	"github.com/loft-sh/devpod/pkg/agent"
 	"github.com/loft-sh/devpod/pkg/binaries"
@@ -16,6 +17,7 @@ import (
 	provider2 "github.com/loft-sh/devpod/pkg/provider"
 	"github.com/loft-sh/devpod/pkg/types"
 	"github.com/loft-sh/log"
+	"github.com/loft-sh/log/scanner"
 	"github.com/sirupsen/logrus"
 )
 
@@ -202,9 +204,16 @@ func (c *customDriver) RunDevContainer(ctx context.Context, workspaceId string,
 		return fmt.Errorf("marshal run options: %w", err)
 	}
 
-	// create a log writer
-	writer := c.log.Writer(logrus.InfoLevel, false)
+	done := make(chan struct{})
+	reader, writer := io.Pipe()
 	defer writer.Close()
+	go func() {
+		scan := scanner.NewScanner(reader)
+		for scan.Scan() {
+			c.log.Info(scan.Text())
+		}
+		done <- struct{}{}
+	}()
 
 	// run command
 	err = c.runCommand(
@@ -221,6 +230,13 @@ func (c *customDriver) RunDevContainer(ctx context.Context, workspaceId string,
 		c.log,
 	)
 	if err != nil {
+		// close writer, wait for logging to flush and shut down
+		writer.Close()
+		select {
+		case <-done:
+		// forcibly shut down after 1 second
+		case <-time.After(1 * time.Second):
+		}
 		return fmt.Errorf("error running devcontainer: %w", err)
 	}