cbz*_*cbz 5 ruby ruby-on-rails jruby
我正在寻找一种快速简便的方法来在Rails中生成唯一的每个请求ID,然后将其用于记录特定请求。
理想情况下,任何解决方案都不应过多使用默认的日志记录代码,因为我同时在jruby和ruby下运行该应用程序。
Backupify 对此发表了一篇很棒的文章:http ://blog.backupify.com/2012/06/27/contextual-logging-with-log4r-and-graylog/
我们希望 request_id(由 rails 生成,并且可以在request.uuid整个请求中出现在所有消息中。为了将其纳入机架日志记录(参数列表和时间等),我们将其添加到 MDC在机架中间件中。
application.rb:
config.middleware.insert_after "ActionDispatch::RequestId", "RequestIdContext"
Run Code Online (Sandbox Code Playgroud)
app/controllers/request_id_context.rb: (由于某种原因无法在 lib 中找到它)
class RequestIdContext
def initialize(app)
@app = app
end
def call(env)
Log4r::MDC.get_context.keys.each {|k| Log4r::MDC.remove(k) }
Log4r::MDC.put("pid", Process.pid)
Log4r::MDC.put("request_id", env["action_dispatch.request_id"])
@app.call(env)
end
end
Run Code Online (Sandbox Code Playgroud)
如果您将作业推送到延迟作业/resque,请将 request_id 放入队列。并在您的工人中将其取下并放入 MDC。然后您可以全程跟踪请求