Question: Prior to rails 3.2, this was prevented by default. With rails 3.2, there doesn't seem to be a clear-cut solution. In comments in the commit introducing the change, Aaron suggested tagging the log lines with process pid and/or request uuid, which doesn't satisfy our Operations folks. I've seen some random solutions hither and yon, but it's unclear how well they solve the problem. This seems like a fairly banal problem that everyone would have; what solutions do others recommend? Does everyone else just rely on NewRelic to log the data about which they care?

[Aaron's Commit](https://github.com/rails/rails/commit/04ef93dae6d9cec616973c1110a33894ad4ba6ed)

Answer: 
We ended up writing a mildly horrible patch to revert to the old behavior:

```
config.after_initialize do

  # Reverse the deprecation of flush in BufferedLogger
  module ActiveSupport
    class BufferedLogger
      def flush
        @log_dest.flush
      end
      def respond_to?(method, include_private = false)
        super
      end
    end
  end

  # Let the OS buffer the log
  Rails.logger.instance_variable_get(:@logger).instance_variable_get(:@log_dest).sync = false
end

```
More info here: <https://github.com/rails/rails/issues/5388>

The answer above didn't flush the log lines after each request (Rails 3.2.18). So I used a initializer [based on this post](http://developer.zendesk.com/blog/2013/09/23/buffer-rails3-logs-for-uninterleaved-requests/):

```
class NonInterleavedLoggingMiddleware
  def initialize(app, options = {})
    @log = Rails.logger
      .instance_variable_get(:@logger)
      .instance_variable_get(:@log)
      .instance_variable_get(:@logdev)
      .instance_variable_get(:@dev)
    @log.sync = false
    @app = app
  end

  def call(env)
    @app.call(env)
  ensure
    @log.flush # Rails.logger.flush has no effect / is deprecated
  end
end

YourAppName::Application.config.middleware.insert_before(Rails::Rack::Logger, NonInterleavedLoggingMiddleware)

```