Skip to content

Instantly share code, notes, and snippets.

@nhance
Created September 6, 2012 12:58
Show Gist options
  • Save nhance/3655996 to your computer and use it in GitHub Desktop.
Save nhance/3655996 to your computer and use it in GitHub Desktop.
Rails compatible method logging. Use this to log all calls to instance methods of a class to the log.
Model.new.foo
module MethodLogger
def self.included(base)
methods = base.instance_methods(false) + base.private_instance_methods(false)
base.class_eval do
methods.each do |method_name|
original_method = instance_method(method_name)
define_method(method_name) do |*args, &block|
Rails.logger.info "-> #{base}##{method_name}(#{args.inspect})"
return_value = original_method.bind(self).call(*args, &block)
Rails.logger.info "<- #{base}##{method_name} #=> #{return_value.inspect}"
return_value
end
end
end
end
end
class Model
include MethodLogging
def foo
"bar"
end
end
-> foo([])
<- foo #=> "bar"
@ridiculous
Copy link

Could also checkout https://github.com/ridiculous/object_tracker for tracking all methods with execution time

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment