Skip to content

Instantly share code, notes, and snippets.

@Nucc
Created August 25, 2014 08:55
Show Gist options
  • Save Nucc/558d306542703d0a5b22 to your computer and use it in GitHub Desktop.
Save Nucc/558d306542703d0a5b22 to your computer and use it in GitHub Desktop.
Rails log delegator
#
# Creates delegators for Rails.logger.(error|warning|info|debug)
# methods.
#
# Example:
#
# class DemoController < ActionController::Base
# def index
# info "Demo controller #index has been called", parameters: params
# end
# end
#
module RailsLogDelegator
[:error, :warning, :info, :debug].each do |severity|
if defined? Rails.logger
define_method(:logging_out) { |severity, *args| Rails.logger.send(severity, *args) }
else
define_method(:logging_out) { |severity, *args| puts "[#{severity}] " + args.join("") }
end
define_method severity do |message, options = [], scope = nil|
scope ||= binding()
vars = RailsLogDelegator::prepare_options(options)
message = RailsLogDelegator::format_message(message, vars)
logging_out(severity, message)
end
end
private
def self.format_message(message, options)
if !options.empty?
message + "; " + options.map { |k, v| "#{k}='#{v}'"}.join(", ")
else
message
end
end
def self.prepare_options(options)
if options.kind_of? Hash
options
elsif options.nil?
{}
else
vars = {}
Array(options).each { |o| vars[o.to_sym] = eval(o.to_s, scope) rescue "N/A" }
vars
end
end
end
class Object
include RailsLogDelegator
end
class Class
include RailsLogDelegator
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment