module Shog::Formatters::Requests

Provide common log formatting options for rails request logs such as controller names views, and render times.

Public Instance Methods

configure( formatter ) click to toggle source

@see Shog::Formatter#configure @see Shog::Formatter#with

# File lib/shog/formatters/requests.rb, line 10
def configure( formatter )
  formatter.configure do

    # Highlight HTTP request methods
    match /Started\s+(?<method>PUT|PATCH|GET|POST|DELETE)\s+(?<path>"[^"]*")[^\d\.]+(?<ip>[\d\.]+)(?<time>.*)/ do |msg,match|
      # http://refiddle.com/ge6
      "#{match["method"].ljust 6} ".green.bold + " #{match["path"]} ".white.bold + " for " + "#{match["ip"]}".yellow + " #{match["time"]}".black
    end

    # Dim detailed info about rendering views
    match /\s*Rendered\s+(?<view>[^\s]+)\s(within\s(?<layout>[^\s]+)\s)?\((?<time>.*)\)/ do |msg,match|
      # http://refiddle.com/18qr
      parts = ["  Rendered #{ match["view"].bold }".black]
      parts << "within ".black + match["layout"].black.bold if match['layout']
      parts << format_time( match['time'].black, 50 )
      parts.join " "
    end

    # Highlight the final rendered response
    match /\s*Completed\s(?<code>\d+)\s(?<friendly>.*)\sin\s(?<time>\d+[^\s]*)\s(?<details>.*)/ do |msg,match|
      # http://refiddle.com/18qq
      parts = [ "Completed" ]
      status = "#{match['code']} #{match['friendly']}"
      parts <<  case match['code'].to_i
                when 200..399 then status.green
                when 400..499 then status.yellow
                else               status.red
                end
      parts << 'in'
      parts << format_time( match['time'], 250 )
      parts << match['details'].black

      parts.join(" ")
    end

    # Highlight the controller and action responding to the request
    match /Processing by (?<controller>[^\s]*) as (?<format>.*)/ do |msg,match|
      # http://refiddle.com/18qs
      "===".magenta + " Processing by #{match['controller'].magenta} as #{match['format'].yellow}"
    end

  end
end