Rails 3 - 所有请求的日志记录输出
问题描述:
我有一个应用程序,它执行大量的API调用(xml和json)。我们希望记录我们对所有请求的响应(我们将过滤我们的html响应)。Rails 3 - 所有请求的日志记录输出
通常,我们在REST中调用并返回JSON或XML。我记录这些今天在应用程序控制器的around_filter让我:
class ApplicationController < ActionController::Base
around_filter :global_request_logging
def global_request_logging
# log request
begin
yield
ensure
#log response
end
end
rescue_from Exception do |exception|
respond_to do |format|
format.xml {head 400}
# etc for JSON and HTML
end
end
end
我遇到的问题是,在那里我测井响应,我们还没有打rescue_from块呢,所以我们正在记录,我们正在返回200.
这使我相信有一个更好的方式/地点在Rails中记录请求/响应。理想情况下,我正在寻找一种登录线路的方式 - 就像客户端的输入和输出一样原始。
答
你可以使用一个Rack中间件,例如:
module Rack
class Snoop
def initialize(app)
@app = app
end
def call(env)
status, headers, body = @app.call(env)
case status
when 200
# Who needs weekly status reports?
mail(:to => "[email protected]", :subject => "See, I told you the application works!", :body => body)
when 500
# A bit of extra motivation to fix these errors
mail(:to => "[email protected]", :subject => "Look boss, the application is broken again!", :body => body)
end
[status, headers, body]
end
end
end
您可以通过将这种在使用它你config/application.rb
或config/environments/ENV.rb
之一。
config.middleware.insert_before(ActionDispatch::ShowExceptions, Rack::Snoop)
你会发现,我ActionDispatch::ShowExceptions
之前插入它,那是因为它会允许赶上造成内部异常的500错误。如果你想在其他地方,你可以偷看中间件堆栈rake middleware
,并把它放在你想要的地方insert_before
或insert_after
。
如何过滤这个特定的URL模式,就像我想记录所有的url“/ api/v2”所做的请求/响应... – vs4vijay 2017-01-17 11:34:27