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