Skip to content

Instantly share code, notes, and snippets.

@okitan
Created December 27, 2011 13:04
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save okitan/1523606 to your computer and use it in GitHub Desktop.
Save okitan/1523606 to your computer and use it in GitHub Desktop.
Rails formatted backtrace on logger (tested in Rails 3.0.10)
Rails.backtrace_cleaner.remove_silencers!
Rails.backtrace_cleaner.add_silencer { |line| line =~ /spec/ }
module ActiveSupport
class BacktraceCleaner
def clean_with_format(backtrace, kind = :silent)
filtered = clean_without_format(backtrace, kind)
splits = filtered.map do |line|
gem, version, line, method = line.split
gem, version, line, method = '', '', gem, version unless line
[ gem, version, [ line, method ].join(' ') ]
end
lengths = splits.map do |gem, version, place|
[ gem.length, version.length, 0 ]
end.transpose.map(&:max)
splits.map do |items|
items.zip(lengths).map do |item, length|
item.ljust(length)
end.join(' ')
end
end
alias_method_chain :clean, :format
end
end
module ActiveSupport
class BufferedLogger
def error_with_backtrace(e)
if e.is_a?(Exception)
[ e.to_s, Rails.backtrace_cleaner.clean(e.backtrace) ].join("\n")
else
e
end
end
def fatal_with_backtrace(message = nil, progname = nil, &block)
fatal_without_backtrace(error_with_backtrace(message), progname, &block)
end
alias_method_chain :fatal, :backtrace
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment