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日志记录?)... 任何想法如何解决这个问题?