aboutsummaryrefslogtreecommitdiffstats
path: root/guides
diff options
context:
space:
mode:
authorGaurish Sharma <contact@gaurishsharma.com>2013-07-21 17:45:53 +0530
committerGaurish Sharma <contact@gaurishsharma.com>2013-07-21 18:57:30 +0530
commitb48bb74ef8a8bc9539d5b9c7d5fe202f37e2e99c (patch)
treeb5c9658a39c2efae72c308cccc4fda931fc0bb67 /guides
parent34b8953609cbebe70fdab3b198e4fda20a9587f9 (diff)
downloadrails-b48bb74ef8a8bc9539d5b9c7d5fe202f37e2e99c.tar.gz
rails-b48bb74ef8a8bc9539d5b9c7d5fe202f37e2e99c.tar.bz2
rails-b48bb74ef8a8bc9539d5b9c7d5fe202f37e2e99c.zip
Add logging performance [ci skip]
Diffstat (limited to 'guides')
-rw-r--r--guides/source/debugging_rails_applications.md31
1 files changed, 31 insertions, 0 deletions
diff --git a/guides/source/debugging_rails_applications.md b/guides/source/debugging_rails_applications.md
index 98f91c1ac6..aadfc00dba 100644
--- a/guides/source/debugging_rails_applications.md
+++ b/guides/source/debugging_rails_applications.md
@@ -209,6 +209,37 @@ logger.tagged("BCX", "Jason") { logger.info "Stuff" } # Logs "
logger.tagged("BCX") { logger.tagged("Jason") { logger.info "Stuff" } } # Logs "[BCX] [Jason] Stuff"
```
+### Impact of Logs on Performance
+Logging will always have a small impact on performance of your rails app,
+ particularly when logging to disk.However, there are a few subtleties:
+
+Using the `:debug` level will have a greater performance penalty than `:fatal`,
+ as a far greater number of strings are being evaluated and written to the
+ log output (e.g. disk).
+
+Another potential pitfall is that if you have many calls to `Logger` like this
+ in your code:
+
+```ruby
+logger.debug "Person attributes hash: #{@person.attributes.inspect}"
+```
+
+In the above example, There will be a performance impact even if the allowed
+output level doesn't include debug. The reason is that Ruby has to evaluate
+these strings, which includes instantiating the somewhat heavy `String` object
+and interpolating the variables, and which takes time.
+Therefore, it's recommended to pass blocks to the logger methods, as these are
+only evaluated if the output level is the same or included in the allowed level
+(i.e. lazy loading). The same code rewritten would be:
+
+```ruby
+logger.debug {"Person attibutes hash: #{@person.attributes.inspect}"}
+```
+
+The contents of the block, and therefore the string interpolation, is only
+evaluated if debug is enabled. This performance savings is only really
+noticeable with large amounts of logging, but it's a good practice to employ.
+
Debugging with the `debugger` gem
---------------------------------