我想使用应用程序的现有记录器从我正在放入Rails应用程序的中间件中记录内容。有没有标准的方法来做到这一点?想到两种可能性:
搜索涉及其中任何一个的解决方案并没有提出太多。我还没有完全考虑/实验,看看操作的顺序是否允许。
答案 0 :(得分:2)
我已经能够通过编写自己的中间件来实现这一点,只需将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