pkg / errors

Simple error handling primitives

Home Page:https://godoc.org/github.com/pkg/errors

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

StackTrace.Format with "%+v" includes a leading newline

segevfiner opened this issue · comments

https://play.golang.org/p/9pIaAGoKF1i

Fixing this might break formatting elsewhere, so needs to be done carefully.

Hm… https://github.com/pkg/errors/blob/master/stack.go#L113-L114

Yeah, it looks like we’re prefixing each frame output with a newline. This probably wasn’t noticed much, because the verbose formatting for errors themselves, was expecting this behavior and the output looked fine there, because it just doesn’t add a newline at the end of the error message, before dumping the stack frame.

More ideally, we probably only want newlines between frames, or after every frame. Both would then require the verbose formatting to inject a newline before getting to the frame output, but that’s pretty easy, and not really any sort of obstacle.

The arguments for “between each frame” vs “at the end of each frame” lies in how we consider the verbose output:

  • between each frame: we are still formatting an error message and programs should expect errors to not end in punctuation, let alone a newline. That way they can be easily composed into log messages, etc. And this option would at least not change the output of verbose formatted errors from what they were before.
  • at the end of each frame: But we are injecting newlines, so we’ve already broken proper expectations about what an error message should look like. (Yes, this has broken log ingest at my company before.) Since we are now effectively emitting a formatted text file, a proper text file should end in a newline.