From 8624a873286173a763c507f3323e679dd0bd26e6 Mon Sep 17 00:00:00 2001 From: risk danger olson Date: Fri, 19 Aug 2016 12:30:53 -0600 Subject: [PATCH] fix stacktrace logging --- commands/commands.go | 6 +++++- errors/errors.go | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/commands/commands.go b/commands/commands.go index 71ce9974..acda2cc0 100644 --- a/commands/commands.go +++ b/commands/commands.go @@ -256,7 +256,11 @@ func logPanicToWriter(w io.Writer, loggedError error) { w.Write(ErrorBuffer.Bytes()) fmt.Fprintln(w) - fmt.Fprintf(w, "%+v\n", loggedError) + fmt.Fprintf(w, "%s\n", loggedError) + for _, stackline := range errors.StackTrace(loggedError) { + fmt.Fprintln(w, stackline) + } + for key, val := range errors.ErrorContext(err) { fmt.Fprintf(w, "%s=%v\n", key, val) } diff --git a/errors/errors.go b/errors/errors.go index 26f0dab0..4a98394a 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -83,3 +83,20 @@ func Wrapf(err error, format string, args ...interface{}) error { return newWrappedError(err, message) } + +func StackTrace(err error) []string { + type stacktrace interface { + StackTrace() errors.StackTrace + } + + if err, ok := err.(stacktrace); ok { + frames := err.StackTrace() + lines := make([]string, len(frames)) + for i, f := range frames { + lines[i] = fmt.Sprintf("%+v", f) + } + return lines + } + + return nil +}