可以从Rack中间件中访问Rails记录器吗?

Joh*_*hir 5 ruby logging rack ruby-on-rails

我想使用应用程序的现有记录器从我正在放入Rails应用程序的中间件中记录内容.有没有标准的方法来做到这一点?想到两种可能性:

  1. 记录器可在机架环境中直接访问
  2. 可以在应用程序启动时访问loger并将其分配给中间件

寻找涉及其中任何一个的解决方案并没有提出太多.我没有完全考虑/实验,看看操作的顺序是否允许.

ben*_*ado 4

我已经能够通过编写自己的中间件来实现这一点,该中间件只需将 Rails.logger 添加到 Rack 环境中。

module Something
  class UseRailsLogger
    def initialize(app)
      @app = app
    end
    def call(env)
      env['rack.logger'] ||= Rails.logger
      @app.call(env)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

如果你把它藏在lib/something/use_rails_logger.rb,那么您可以将其添加到中间件堆栈中,并且记录器将可供其后面的每一层使用。

注意:我想将其添加到,config/application.rb因为此设置没有理由依赖于环境,但由于某种原因require 'something/use_rails_logger'无法在该文件中工作。添加它config/environment/*.rb效果很好。除了require您需要的之外,还有:

config.middleware.use Rack::UseRailsLogger
Run Code Online (Sandbox Code Playgroud)