From: "inversion (Yura Babak)" Date: 2021-10-07T14:12:38+00:00 Subject: [ruby-core:105590] [Ruby master Bug#18244] Unexpected errors output order Issue #18244 has been updated by inversion (Yura Babak). > Do you have any reason to make `stderr` unbuffered? I do add records to stdout within a cycle, so it is better to have it buffered for better overall performance. Also, I have few parallel workers in threads with such cycles. As a result, when some worker crashes (and app terminated) ��� in the log there is an error output and after it a lot of regular outputs from other workers, so it is very hard to find out in which iteration error actually happened. ---------------------------------------- Bug #18244: Unexpected errors output order https://bugs.ruby-lang.org/issues/18244#change-94058 * Author: inversion (Yura Babak) * Status: Feedback * Priority: Normal * ruby -v: Ruby v3.0.2.107 (2021-07-07) [x64-mingw32] * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- Having this code: ```ruby # $stderr.sync = false warn 'warn' $stderr.puts 'err' fail ``` When I run it like this `ruby test.rb 2>err.log`, output is ok: ``` warn err test.rb:3:in `
': unhandled exception ``` But when I uncomment the first line ��� the output is different: ``` warn test.rb:3:in `
': unhandled exception err ``` Why buffered output to the `$stderr` redirected to file has the **wrong order**? If we do not redirect to the file ��� the order is ok (exception is the last line of the output). Checked platforms: `Windows10: Ruby v3.0.2.107 (2021-07-07) [x64-mingw32]` `Linux: Ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]` -- https://bugs.ruby-lang.org/ Unsubscribe: