【问题标题】:Can the Rails logger be accessed from within a Rack middleware?可以从 Rack 中间件中访问 Rails 记录器吗?
【发布时间】:2013-06-24 06:28:28
【问题描述】:

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

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

搜索涉及其中任何一个的解决方案并没有太多收获。我还没有完全考虑/实验,看看操作顺序是否允许任何一个可能。

【问题讨论】:

  • 您可以尝试调用 Rails.logger 并查看...
  • 根据Rails的名称和Ruby的命名规则,你知道多少?

标签: ruby-on-rails ruby logging rack


【解决方案1】:

我已经能够通过编写自己的中间件来实现它,该中间件只是将 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

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

注意:我想将它添加到config/application.rb,因为这个设置没有理由依赖于环境,但由于某种原因,require 'something/use_rails_logger' 不适用于该文件。将它添加到config/environment/*.rb 工作得很好。除了require,您只需要:

config.middleware.use Rack::UseRailsLogger

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    相关资源
    最近更新 更多