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]
残念ながら、何らかの理由で、これは同じリクエスト内の異なるログ項目に対して同じ経過時間を出力します。これは、ラムダが一度に複数の項目に対して評価されているという事実に関係している可能性があると思います (Buffered Logging?) ...これを解決する方法はありますか?