我想使用应用程序现有的记录器从我放入 Rails 应用程序的中间件中记录内容。有没有标准的方法来做到这一点?想到了两种可能:
- 记录仪可在机架环境中直接访问
- 记录器可以在应用程序启动时访问并分配给中间件
搜索涉及其中任何一个的解决方案并没有太多的结果。我还没有完全考虑/尝试过操作顺序是否允许其中任何一个成为可能。
我想使用应用程序现有的记录器从我放入 Rails 应用程序的中间件中记录内容。有没有标准的方法来做到这一点?想到了两种可能:
搜索涉及其中任何一个的解决方案并没有太多的结果。我还没有完全考虑/尝试过操作顺序是否允许其中任何一个成为可能。
我已经能够通过编写自己的中间件来实现这一点,该中间件只是将 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