Rails: Logging the entire stack trace of an exception
Based on kuboon's answer I find this logging format to be generic and useful to categorise errors in my logfiles:
begin
raise
rescue StandardError => e
Rails.logger.error (["#{self.class} - #{e.class}: #{e.message}"]+e.backtrace).join("\n")
end
This is the answer.
begin
raise
rescue => e
logger.error ([e.message]+e.backtrace).join($/)
end
If you look at the source for the BufferedLogger class in ActiveSupport, you'll see that the second argument is 'progname'. This is used only when the first argument is nil and you have either given it no block or the block return a non-true value.
In essence, you can't use the second parameter to output additional stuff.
What you want to do is something more akin to:
begin
raise
rescue => e
logger.error e.message
logger.error e.backtrace.join("\n")
end
Depending on how you have your logging setup, it might be better to iterate through each line of the backtrace and print it separately as certain loggers don't output newlines, in which case you'd do something like:
begin
raise
rescue => e
logger.error e.message
e.backtrace.each { |line| logger.error line }
end