如果控制器操作中存在异常并且使用了rescue
,则Rails不会在浏览器中显示异常(这是正常的),也不会将异常写入日志文件。
在这种情况下,有没有办法让Rails将异常写入日志文件?
示例:
def some_action
2/0
rescue
#this code is called, but Rails does not write the exception to the log
end
答案 0 :(得分:3)
你正在拯救这个例外,所以它不会记录它,因为实际上没有任何不好的事情,因为它实际上是“被救出来的”。
您可以将以下代码放在rescue
块中,以便在日志中输入一个条目:
logger.warn "Exception rescued!"
您可以阅读有关使用logger in the Rails Guides。
的更多信息答案 1 :(得分:0)
我最终在rescue_from
中使用ApplicationController
,记录了异常消息并进行了回溯,然后使用params[:controller]
和params[:action]
来确定要重定向到的控制器/操作。
例如,如果PostsController#show
例外情况发生,我会从 PostsController#index
内的重定向到rescue_from
。到目前为止,它一直在 ,因此从redirect_to
开始{em>似乎不是一件坏事。rescue_from
。时间会让我知道,我敢肯定! (只需要确保我的重定向不会导致一些无限循环!)
只是在某人对此 hack 感兴趣(请自担风险!):
class ApplicationController < ActionController::Base
def determine_redirect_to_path(controller,action)
...
end
rescue_from StandardError do |exception|
backtrace_size = exception.backtrace.size
if backtrace_size >= 2 then max_range = 2
elsif backtrace_size >= 1 then max_range = 1
end
if max_range > 0
s = "rescued_from:: #{params[:controller]}##{params[:action]}: #{exception.inspect}\n#{exception.backtrace[0..max_range].to_s}\n"
logger.error s
end
redirect_to determine_redirect_to_path(params[:controller],params[:action])
end
end