Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Give AR the new benchmark method too

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2143 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit f2a89d7862313505562186620a07d498190971c3 1 parent f86276b
@dhh dhh authored
Showing with 8 additions and 5 deletions.
  1. +8 −5 activerecord/lib/active_record/base.rb
View
13 activerecord/lib/active_record/base.rb
@@ -706,8 +706,7 @@ def sanitize(object) #:nodoc:
connection.quote(object)
end
- # Log and benchmark multiple statements in a single block.
- # Usage (hides all the SQL calls for the individual actions and calculates total runtime for them all):
+ # Log and benchmark multiple statements in a single block. Example:
#
# Project.benchmark("Creating project") do
# project = Project.create("name" => "stuff")
@@ -715,12 +714,16 @@ def sanitize(object) #:nodoc:
# project.milestones << Milestone.find(:all)
# end
#
+ # The benchmark is only recorded if the current level of the logger matches the <tt>log_level</tt>, which makes it
+ # easy to include benchmarking statements in production software that will remain inexpensive because the benchmark
+ # will only be conducted if the log level is low enough.
+ #
# The loggings of the multiple statements is turned off unless <tt>use_silence</tt> is set to false.
- def benchmark(title, use_silence = true)
- if logger
+ def benchmark(title, log_level = Logger::DEBUG, use_silence = true)
+ if logger && logger.level == log_level
result = nil
seconds = Benchmark.realtime { result = use_silence ? silence { yield } : yield }
- logger.info "#{title} (#{'%.5f' % seconds)})"
+ logger.add(log_level, "#{title} (#{'%.5f' % seconds})")
result
else
yield
Please sign in to comment.
Something went wrong with that request. Please try again.