Rails 3.2.x - 记录已用完的请求时间

时间:2013-04-17 07:48:13

标签: ruby-on-rails logging rack

Rails 3.2.X日志记录机制有了很大的改进。

但是,我正在寻找一种方法来在每个日志项之前添加“自请求开始以来经过的时间”前缀(以毫秒或时间戳为单位)。 (请求由uuid标识)

我认为我可能不得不为此编写自己的Rack中间件,但也许有一个更简单的解决方案开箱即用?

更新

我构建了自己的Rack中间件:

class RequestElapsedTime
  def initialize(app)
    @app = app
  end

  def call(env)
    # Set request start time so it can be used as part of the 'request' context.
    env['REQUEST_START_TIME'] = Time.now

    # Call next middleware component
    status, headers, response = @app.call(env)

    # return a valid rack response
    [status, headers, response]
  end
end

并将以下内容添加到application.rb:

elapsed_time = lambda do |req|
  req_start_time = req.env['REQUEST_START_TIME']
  return unless req_start_time

  (Time.now - req_start_time) * 1000.0
end

# Add request UUID to logs
config.log_tags = [:uuid, elapsed_time]

不幸的是,出于某种原因,这会为同一请求中的不同日志项输出相同的已用时间,这使我认为它可能与lambda一次评估多个项目的事实有关(Buffered日志记录?)... 任何想法如何解决这个问题?

0 个答案:

没有答案