|
3 | 3 |
|
4 | 4 | module Rails
|
5 | 5 | module Rack
|
6 |
| - # Log the request started and flush all loggers after it. |
| 6 | + # Sets log tags, logs the request, calls the app, and flushes the logs. |
7 | 7 | class Logger < ActiveSupport::LogSubscriber
|
8 |
| - def initialize(app, tags=nil) |
9 |
| - @app, @tags = app, tags.presence |
| 8 | + def initialize(app, taggers = nil) |
| 9 | + @app, @taggers = app, taggers || [] |
10 | 10 | end
|
11 | 11 |
|
12 | 12 | def call(env)
|
13 |
| - if @tags && Rails.logger.respond_to?(:tagged) |
14 |
| - Rails.logger.tagged(compute_tags(env)) { call_app(env) } |
| 13 | + request = ActionDispatch::Request.new(env) |
| 14 | + |
| 15 | + # Put some space between requests in development logs. |
| 16 | + Rails.logger.info "\n\n" if Rails.env.development? |
| 17 | + |
| 18 | + if Rails.logger.respond_to?(:tagged) |
| 19 | + Rails.logger.tagged(compute_tags(request)) { call_app(request, env) } |
15 | 20 | else
|
16 |
| - call_app(env) |
| 21 | + call_app(request, env) |
17 | 22 | end
|
18 | 23 | end
|
19 | 24 |
|
20 | 25 | protected
|
21 | 26 |
|
22 |
| - def call_app(env) |
23 |
| - request = ActionDispatch::Request.new(env) |
24 |
| - path = request.filtered_path |
25 |
| - Rails.logger.info "\n\n" |
26 |
| - Rails.logger.info "Started #{request.request_method} \"#{path}\" for #{request.ip} at #{Time.now.to_default_s}" |
| 27 | + def call_app(request, env) |
| 28 | + Rails.logger.info started_request_message(request) |
27 | 29 | @app.call(env)
|
28 | 30 | ensure
|
29 | 31 | ActiveSupport::LogSubscriber.flush_all!
|
30 | 32 | end
|
31 | 33 |
|
32 |
| - def compute_tags(env) |
33 |
| - request = ActionDispatch::Request.new(env) |
| 34 | + # Started GET "/session/new" for 127.0.0.1 at 2012-09-26 14:51:42 -0700 |
| 35 | + def started_request_message(request) |
| 36 | + 'Started %s "%s" for %s at %s' % [ |
| 37 | + request.request_method, |
| 38 | + request.filtered_path, |
| 39 | + request.ip, |
| 40 | + Time.now.to_default_s ] |
| 41 | + end |
34 | 42 |
|
35 |
| - @tags.collect do |tag| |
| 43 | + def compute_tags(request) |
| 44 | + @taggers.collect do |tag| |
36 | 45 | case tag
|
37 | 46 | when Proc
|
38 | 47 | tag.call(request)
|
|
0 commit comments