class GrapeLogging::Formatters::Rails

Public Instance Methods

call(severity, datetime, _, data) click to toggle source
# File lib/grape_logging/formatters/rails.rb, line 7
def call(severity, datetime, _, data)
  if data.is_a?(String)
    "#{severity[0..0]} [#{datetime}] #{severity} -- : #{data}\n"
  elsif data.is_a?(Exception)
    "#{severity[0..0]} [#{datetime}] #{severity} -- : #{format_exception(data)}\n"
  elsif data.is_a?(Hash)
    format_hash(data)
  else
    "#{data.inspect}\n"
  end
end

Private Instance Methods

format_exception(exception) click to toggle source
# File lib/grape_logging/formatters/rails.rb, line 21
def format_exception(exception)
  backtrace_array = (exception.backtrace || []).map { |line| "\t#{line}" }

  [
    "#{exception.message} (#{exception.class})",
    backtrace_array.join("\n")
  ].reject{|line| line == ""}.join("\n")
end
format_hash(hash) click to toggle source
# File lib/grape_logging/formatters/rails.rb, line 30
def format_hash(hash)
  # Create Rails' single summary line at the end of every request, formatted like:
  # Completed 200 OK in 958ms (Views: 951.1ms | ActiveRecord: 3.8ms)
  # See: actionpack/lib/action_controller/log_subscriber.rb

  message = ""
  additions = []
  status = hash.delete(:status)
  params = hash.delete(:params)

  total_time = hash[:time] && hash[:time][:total] && hash[:time][:total].round(2)
  view_time  = hash[:time] && hash[:time][:view]  && hash[:time][:view].round(2)
  db_time    = hash[:time] && hash[:time][:db]    && hash[:time][:db].round(2)

  additions << "Views: #{view_time}ms" if view_time
  additions << "DB: #{db_time}ms"      if db_time

  message << "  Parameters: #{params.inspect}\n" if params

  message << "Completed #{status} #{::Rack::Utils::HTTP_STATUS_CODES[status]} in #{total_time}ms"
  message << " (#{additions.join(" | ".freeze)})" if additions.size > 0
  message << "\n"
  message << "\n" if defined?(::Rails.env) && ::Rails.env.development?

  message
end