我正在编写我的第一个基于 Sinatra 的 Web 应用程序作为另一个基于 TCP 的服务的前端,使用 EventMachine 和 async_sinatra 异步处理传入的 HTTP 请求。当我测试我的应用程序时,对同步路由的所有请求都以通用日志格式记录到标准输出,但异步请求不是。
我已经阅读了 async_sinatra、Sinatra、Thin 和 Rack 的源代码,看起来同步请求的日志记录是通过 CommonLogger#call 完成的。但是,我在 async_sinatra 或 Thin 的异步代码中找不到任何似乎通过日志中间件传递异步请求的地方(我正在查看async_sinatra 和Thin::Connection.post_process中的Sinatra::Helpers#body和 Thin::Connection.post_process写入 Thin 的 connection.rb:68 和 request.rb:132 中的 env['.async_callback'] 中)。
我对 C 有经验,但对 Ruby 比较陌生,所以如果我错误地使用了一些术语或符号,请纠正我。提前致谢。
编辑:这也会影响错误处理。如果在异步请求中引发异常,则请求永远不会完成,并且永远不会记录错误。