Logging Rails requests with structure and colors

rhymes profile image rhymes ・1 min read

In a related post about Flask and Python I explained how to structure request logs in Python with a sprinkle of colors.

Rails already has the great lograge but how can we leverage it and add ANSI colors to the strings?

Fortunately lograge supports custom formatters with:

Rails.application.configure do
  config.lograge.enabled = true
  config.lograge.formatter = YourOwnFormatter.new

so I just created a new formatter to add colors like this:

require 'colorized_string'

class ColorKeyValue < Lograge::Formatters::KeyValue
    method: :red,
    path: :red,
    format: :red,
    controller: :green,
    action: :green,
    status: :yellow,
    duration: :magenta,
    view: :magenta,
    db: :magenta,
    time: :cyan,
    ip: :red,
    host: :red,
    params: :green

  def format(key, value)
    line = super(key, value)

    color = FIELDS_COLORS[key] || :default

I admit that color coding each parameter might be a little too much but I'm having fun :-D

require 'colorized_string' and ColorizedString are part of the colorize library.

This is the result:

colorized logging

Posted on Mar 16 '18 by:

rhymes profile



Software developer @ DEV


markdown guide

can you describe more about where to put ColorKeyValue class ? I would be very appreicated
I'm trying to make YourOwnFormatter.new work but failed.

I created a file called color_key_value.rb and put those code inside
require 'colorized_string'
class ColorKeyValue < Lograge::Formatters::KeyValue
config.lograge.formatter = ColorKeyValue.new in development.rb

but it shows uninitialized constant ColorKeyValue (NameError)


You should put everything in a lograge initializer.

# config/initializers/lograge.rb
require 'colorized_string'

class ColorKeyValue < Lograge::Formatters::KeyValue
  # ...

Rails.application.configure do
  config.lograge.enabled = true
  config.lograge.formatter = ColorKeyValue.new

thank you ! but I think got the error at this line : color = FIELDS_COLORS[key] || :default

Could not log "process_action.action_controller" event. NoMethodError: undefined method `default' for "user_type=NONE":ColorizedString ["/Users/alvin/Documents/flw/config/initializers/lograge.rb:24

Can you share the whole file? You can use stuff gist.github.com/ or pastebin.com/


That's really cool and I love how simple it is. Thanks for sharing!


Awesome! Love how simple this is.