add logger, remove env from constructor
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)
 	}