Skip to content
This repository has been archived by the owner on Dec 1, 2021. It is now read-only.

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

Open
segevfiner opened this issue Aug 15, 2020 · 1 comment
Open

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

segevfiner opened this issue Aug 15, 2020 · 1 comment

Comments

@segevfiner
Copy link

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

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

@puellanivis
Copy link

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.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants