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
end
so I just created a new formatter to add colors like this:
require 'colorized_string'
class ColorKeyValue < Lograge::Formatters::KeyValue
FIELDS_COLORS = {
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
ColorizedString.new(line).public_send(color)
end
end
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:
Top comments (9)
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
...
and
config.lograge.formatter = ColorKeyValue.new in development.rb
but it shows uninitialized constant ColorKeyValue (NameError)
You should put everything in a lograge initializer.
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!
Colorize is great 👍
Awesome! Love how simple this is.
Can we add background color to the rails log, using this gem. Thank you so much for this!
I think so, the colorize gem used in the example supports them: github.com/fazibear/colorize#usage