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.