aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/backtrace_cleaner.rb
diff options
context:
space:
mode:
authorLachlan Sylvester <lachlan.sylvester@publicisfrontfoot.com.au>2018-08-06 11:06:01 +1000
committerLachlan Sylvester <lachlan.sylvester@publicisfrontfoot.com.au>2018-08-14 09:15:28 +1000
commitc675783eb4fb42a357ec068d4cfd83bf08f78aea (patch)
tree3b33266cddd9656569ab5f998980c64255e0f01c /activesupport/lib/active_support/backtrace_cleaner.rb
parentffc4703f22888dce0394fe0ab524a9e6cdc3c7e5 (diff)
downloadrails-c675783eb4fb42a357ec068d4cfd83bf08f78aea.tar.gz
rails-c675783eb4fb42a357ec068d4cfd83bf08f78aea.tar.bz2
rails-c675783eb4fb42a357ec068d4cfd83bf08f78aea.zip
Use backtrace cleaner to clean up backtrace for verbose query logs
Diffstat (limited to 'activesupport/lib/active_support/backtrace_cleaner.rb')
-rw-r--r--activesupport/lib/active_support/backtrace_cleaner.rb23
1 files changed, 23 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/backtrace_cleaner.rb b/activesupport/lib/active_support/backtrace_cleaner.rb
index 16dd733ddb..1796956bd7 100644
--- a/activesupport/lib/active_support/backtrace_cleaner.rb
+++ b/activesupport/lib/active_support/backtrace_cleaner.rb
@@ -31,6 +31,9 @@ module ActiveSupport
class BacktraceCleaner
def initialize
@filters, @silencers = [], []
+ add_gem_filter
+ add_gem_silencer
+ add_stdlib_silencer
end
# Returns the backtrace after all filters and silencers have been run
@@ -82,6 +85,26 @@ module ActiveSupport
end
private
+
+ FORMATTED_GEMS_PATTERN = /\A[^\/]+ \([\w.]+\) /
+
+ def add_gem_filter
+ gems_paths = (Gem.path | [Gem.default_dir]).map { |p| Regexp.escape(p) }
+ return if gems_paths.empty?
+
+ gems_regexp = %r{(#{gems_paths.join('|')})/(bundler/)?gems/([^/]+)-([\w.]+)/(.*)}
+ gems_result = '\3 (\4) \5'.freeze
+ add_filter { |line| line.sub(gems_regexp, gems_result) }
+ end
+
+ def add_gem_silencer
+ add_silencer { |line| FORMATTED_GEMS_PATTERN.match?(line) }
+ end
+
+ def add_stdlib_silencer
+ add_silencer { |line| line.start_with?(RbConfig::CONFIG["rubylibdir"]) }
+ end
+
def filter_backtrace(backtrace)
@filters.each do |f|
backtrace = backtrace.map { |line| f.call(line) }