mirror of
https://github.com/meineerde/rackstash.git
synced 2026-02-01 01:37:12 +00:00
Previously, we would only setup a `::Rack::BodyProxy` to eventually log the request once the response is deivered to the client. We did this mainly in order to have a more "accurate" duration in the logs, similar to what the `::Rack::CommonLogger` middleware does. This has some significant disadvantages though: * If an exception is raised by an outer middleware after we returned, the response is never delivered and the log is lost. * If a timeout occured (and e.g. a Unicorn worker is killed or a `Rack::Timeout` stroke) before we return the full response, the log is lost. * If the client goes away before the request is finished, the app server might decide no just throw away the response. Besides addressing these issues, logging directly after the request leaves our middleware scope makes the whole process much easier to reason about.