sweet: print additional details during a subprocess failure

This change also updates the places that print errors to use log.Error
instead of rolling their own methods.

Change-Id: I4a858f43213c4cd9ade1d777795f380977b87f1b
Reviewed-on: https://go-review.googlesource.com/c/benchmarks/+/383536
Trust: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
diff --git a/sweet/cli/subcommands/sc.go b/sweet/cli/subcommands/sc.go
index 6b3bba5..44e4d31 100644
--- a/sweet/cli/subcommands/sc.go
+++ b/sweet/cli/subcommands/sc.go
@@ -13,6 +13,7 @@
 	"unicode/utf8"
 
 	"golang.org/x/benchmarks/sweet/common"
+	"golang.org/x/benchmarks/sweet/common/log"
 )
 
 const (
@@ -128,7 +129,7 @@
 	}
 	chosen.flags.Parse(os.Args[2:])
 	if err := chosen.Run(chosen.flags.Args()); err != nil {
-		fmt.Fprintf(out, "error: %v\n", err)
+		log.Error(err)
 		return 1
 	}
 	return 0
diff --git a/sweet/cmd/sweet/run.go b/sweet/cmd/sweet/run.go
index 0ca218b..111d498 100644
--- a/sweet/cmd/sweet/run.go
+++ b/sweet/cmd/sweet/run.go
@@ -313,7 +313,7 @@
 				return err
 			}
 			errEncountered = true
-			log.Printf("error: %v\n", err)
+			log.Error(err)
 		}
 	}
 	if errEncountered {
diff --git a/sweet/common/log/log.go b/sweet/common/log/log.go
index 1b0d28d..0ff58be 100644
--- a/sweet/common/log/log.go
+++ b/sweet/common/log/log.go
@@ -118,4 +118,7 @@
 
 func Error(err error) {
 	actLog.Printf("error: %v", err)
+	if e, ok := err.(*exec.ExitError); ok {
+		actLog.Printf("output:\n%s", string(e.Stderr))
+	}
 }