1

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 正在同时针对多个项进行评估(缓冲日志记录?) ...知道如何解决这个问题吗?

4

0 回答 0