class TimeBandits::Rack::Logger
Sets log tags, logs the request, calls the app, and flushes the logs.
Public Class Methods
new(app, taggers = nil)
click to toggle source
# File lib/time_bandits/rack/logger.rb, line 11 def initialize(app, taggers = nil) @app = app @taggers = taggers || Rails.application.config.log_tags || [] @instrumenter = ActiveSupport::Notifications.instrumenter end
Public Instance Methods
call(env)
click to toggle source
# File lib/time_bandits/rack/logger.rb, line 17 def call(env) request = ActionDispatch::Request.new(env) if logger.respond_to?(:tagged) && !@taggers.empty? logger.tagged(compute_tags(request)) { call_app(request, env) } else call_app(request, env) end end
Protected Instance Methods
call_app(request, env)
click to toggle source
# File lib/time_bandits/rack/logger.rb, line 29 def call_app(request, env) start_time = Time.now start(request, start_time) resp = @app.call(env) resp[2] = ::Rack::BodyProxy.new(resp[2]) { finish(request) } resp rescue finish(request) raise ensure completed(request, (Time.now - start_time) * 1000, resp) ActiveSupport::LogSubscriber.flush_all! end
started_request_message(request, start_time=Time.now)
click to toggle source
Started GET “/session/new” for 127.0.0.1 at 2012-09-26 14:51:42 -0700
# File lib/time_bandits/rack/logger.rb, line 44 def started_request_message(request, start_time=Time.now) 'Started %s "%s" for %s at %s' % [ request.request_method, request.filtered_path, request.ip, start_time.to_default_s ] end
Private Instance Methods
completed(request, run_time, resp)
click to toggle source
# File lib/time_bandits/rack/logger.rb, line 76 def completed(request, run_time, resp) status = resp ? resp.first.to_i : 500 completed_info = Thread.current.thread_variable_get(:time_bandits_completed_info) additions = completed_info[1] if completed_info message = "Completed #{status} #{::Rack::Utils::HTTP_STATUS_CODES[status]} in %.1fms" % run_time message << " (#{additions.join(' | ')})" unless additions.blank? logger.info message end
finish(request)
click to toggle source
# File lib/time_bandits/rack/logger.rb, line 85 def finish(request) @instrumenter.finish 'action_dispatch.request', request: request end
logger()
click to toggle source
# File lib/time_bandits/rack/logger.rb, line 89 def logger @logger ||= Rails.logger end
start(request, start_time)
click to toggle source
# File lib/time_bandits/rack/logger.rb, line 67 def start(request, start_time) TimeBandits.reset Thread.current.thread_variable_set(:time_bandits_completed_info, nil) @instrumenter.start 'action_dispatch.request', request: request logger.debug "" logger.info started_request_message(request, start_time) end