diff --git a/provisioner.go b/provisioner.go
index 58af15567d58fc4c17b0656168b2f3d321e92615..48336d92f2371bd0e5d4bdd74fa30156bac59140 100644
--- a/provisioner.go
+++ b/provisioner.go
@@ -1,9 +1,11 @@
 package main
 
 import (
+	"bytes"
 	"context"
 	"encoding/json"
 	"fmt"
+	"io"
 	"os"
 	"path/filepath"
 	"reflect"
@@ -18,6 +20,7 @@ import (
 	k8serror "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	clientset "k8s.io/client-go/kubernetes"
+	"k8s.io/client-go/rest"
 
 	pvController "sigs.k8s.io/sig-storage-lib-external-provisioner/v8/controller"
 )
@@ -556,12 +559,16 @@ func (p *LocalPathProvisioner) createHelperPod(action ActionType, cmd []string,
 	// If it already exists due to some previous errors, the pod will be cleaned up later automatically
 	// https://github.com/rancher/local-path-provisioner/issues/27
 	logrus.Infof("create the helper pod %s into %s", helperPod.Name, p.namespace)
-	_, err = p.kubeClient.CoreV1().Pods(p.namespace).Create(context.TODO(), helperPod, metav1.CreateOptions{})
+	pod, err := p.kubeClient.CoreV1().Pods(p.namespace).Create(context.TODO(), helperPod, metav1.CreateOptions{})
 	if err != nil && !k8serror.IsAlreadyExists(err) {
 		return err
 	}
 
 	defer func() {
+		// log helper pod logs to the controller
+		if err := saveHelperPodLogs(pod); err != nil {
+			logrus.Error(err.Error())
+		}
 		e := p.kubeClient.CoreV1().Pods(p.namespace).Delete(context.TODO(), helperPod.Name, metav1.DeleteOptions{})
 		if e != nil {
 			logrus.Errorf("unable to delete the helper pod: %v", e)
@@ -701,3 +708,45 @@ func createPersistentVolumeSource(volumeType string, path string) (pvs v1.Persis
 
 	return pvs, nil
 }
+
+func saveHelperPodLogs(pod *v1.Pod) (err error) {
+	defer func() {
+		err = errors.Wrapf(err, "failed to save %s logs", pod.Name)
+	}()
+
+	// save helper pod logs
+	podLogOpts := v1.PodLogOptions{}
+	config, err := rest.InClusterConfig()
+	if err != nil {
+		return fmt.Errorf("unable to retrieve in cluster config: %s", err.Error())
+	}
+	// creates the clientset
+	clientset, err := clientset.NewForConfig(config)
+	if err != nil {
+		return fmt.Errorf("unable to get access to k8s: %s", err.Error())
+	}
+	req := clientset.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, &podLogOpts)
+	podLogs, err := req.Stream(context.TODO())
+	if err != nil {
+		return fmt.Errorf("error in opening stream: %s", err.Error())
+	}
+
+	buf := new(bytes.Buffer)
+	_, err = io.Copy(buf, podLogs)
+	if err != nil {
+		return fmt.Errorf("error in copy information from podLogs to buf: %s", err.Error())
+	}
+	podLogs.Close()
+
+	// log all messages from the helper pod to the controller
+	logrus.Infof("Start of %s logs", pod.Name)
+	bufferStr := buf.String()
+	if len(bufferStr) > 0 {
+		helperPodLogs := strings.Split(strings.Trim(bufferStr, "\n"), "\n")
+		for _, log := range helperPodLogs {
+			logrus.Info(log)
+		}
+	}
+	logrus.Infof("End of %s logs", pod.Name)
+	return nil
+}