使用每个请求的ID登录Rails

cbz*_*cbz 5 ruby ruby-on-rails jruby

我正在寻找一种快速简便的方法来在Rails中生成唯一的每个请求ID,然后将其用于记录特定请求。

理想情况下,任何解决方案都不应过多使用默认的日志记录代码,因为我同时在jruby和ruby下运行该应用程序。

kbr*_*ock 5

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。然后您可以全程跟踪请求


rsp*_*rsp 0

也许log4rNDC功能对您有用。