diff --git a/tfexec/terraform.go b/tfexec/terraform.go
index d501889..9ee9501 100644
--- a/tfexec/terraform.go
+++ b/tfexec/terraform.go
@@ -5,6 +5,8 @@
 	"context"
 	"encoding/json"
 	"fmt"
+	"io/ioutil"
+	"log"
 	"os"
 	"strings"
 
@@ -16,12 +18,13 @@
 	workingDir  string
 	execVersion string
 	env         []string
+	logger      *log.Logger
 }
 
 // NewTerraform returns a Terraform struct with default values for all fields.
 // If a blank execPath is supplied, NewTerraform will attempt to locate an
 // appropriate binary on the system PATH.
-func NewTerraform(workingDir string, execPath string, env map[string]string) (*Terraform, error) {
+func NewTerraform(workingDir string, execPath string) (*Terraform, error) {
 	var err error
 	if workingDir == "" {
 		return nil, fmt.Errorf("Terraform cannot be initialised with empty workdir")
@@ -41,7 +44,8 @@
 	tf := Terraform{
 		execPath:   execPath,
 		workingDir: workingDir,
-		env:        getTerraformEnv(env),
+		env:        os.Environ(),
+		logger:     log.New(ioutil.Discard, "", 0),
 	}
 
 	execVersion, err := tf.version()
@@ -54,27 +58,25 @@
 	return &tf, nil
 }
 
-func getTerraformEnv(env map[string]string) []string {
-	var ret []string
-
-	if env == nil {
-		for _, e := range os.Environ() {
-			ret = append(ret, e)
-		}
-	}
+func (tf *Terraform) SetEnv(env map[string]string) {
+	var tfenv []string
 
 	// always propagate CHECKPOINT_DISABLE env var unless it is
 	// explicitly overridden
 	c := os.Getenv("CHECKPOINT_DISABLE")
 	if c != "" {
-		ret = append(ret, "CHECKPOINT_DISABLE="+c)
+		tfenv = append(tfenv, "CHECKPOINT_DISABLE="+c)
 	}
 
 	for k, v := range env {
-		ret = append(ret, k+"="+v)
+		tfenv = append(tfenv, k+"="+v)
 	}
 
-	return ret
+	tf.env = tfenv
+}
+
+func (tf *Terraform) SetLogger(logger *log.Logger) {
+	tf.logger = logger
 }
 
 func (tf *Terraform) version() (string, error) {
diff --git a/tfexec/terraform_cmd.go b/tfexec/terraform_cmd.go
index d42e28e..2e50907 100644
--- a/tfexec/terraform_cmd.go
+++ b/tfexec/terraform_cmd.go
@@ -14,6 +14,8 @@
 	cmd.Env = env
 	cmd.Dir = tf.workingDir
 
+	tf.logger.Printf("Terraform command: %s", cmd.String())
+
 	return cmd
 }
 
diff --git a/tfexec/terraform_test.go b/tfexec/terraform_test.go
index c7a6a79..b8216ff 100644
--- a/tfexec/terraform_test.go
+++ b/tfexec/terraform_test.go
@@ -23,7 +23,7 @@
 	td := testTempDir(t)
 	defer os.RemoveAll(td)
 
-	tf, err := NewTerraform(td, "", nil)
+	tf, err := NewTerraform(td, "")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -55,7 +55,7 @@
 	td := testTempDir(t)
 	defer os.RemoveAll(td)
 
-	tf, err := NewTerraform(td, "", nil)
+	tf, err := NewTerraform(td, "")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -87,7 +87,7 @@
 	td := testTempDir(t)
 	defer os.RemoveAll(td)
 
-	tf, err := NewTerraform(td, "", nil)
+	tf, err := NewTerraform(td, "")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -107,7 +107,7 @@
 	td := testTempDir(t)
 	defer os.RemoveAll(td)
 
-	tf, err := NewTerraform(td, "", nil)
+	tf, err := NewTerraform(td, "")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -139,7 +139,7 @@
 	td := testTempDir(t)
 	defer os.RemoveAll(td)
 
-	tf, err := NewTerraform(td, "", nil)
+	tf, err := NewTerraform(td, "")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -180,7 +180,7 @@
 	td := testTempDir(t)
 	defer os.RemoveAll(td)
 
-	tf, err := NewTerraform(td, "", nil)
+	tf, err := NewTerraform(td, "")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -213,7 +213,7 @@
 	td := testTempDir(t)
 	defer os.RemoveAll(td)
 
-	tf, err := NewTerraform(td, "", nil)
+	tf, err := NewTerraform(td, "")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -234,7 +234,7 @@
 	td := testTempDir(t)
 	defer os.RemoveAll(td)
 
-	tf, err := NewTerraform(td, "", nil)
+	tf, err := NewTerraform(td, "")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -255,7 +255,7 @@
 	td := testTempDir(t)
 	defer os.RemoveAll(td)
 
-	tf, err := NewTerraform(td, "", nil)
+	tf, err := NewTerraform(td, "")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -309,7 +309,7 @@
 	td := testTempDir(t)
 	defer os.RemoveAll(td)
 
-	tf, err := NewTerraform(td, "", nil)
+	tf, err := NewTerraform(td, "")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -331,7 +331,7 @@
 	td := testTempDir(t)
 	defer os.RemoveAll(td)
 
-	tf, err := NewTerraform(td, "", nil)
+	tf, err := NewTerraform(td, "")
 	if err != nil {
 		t.Fatal(err)
 	}
