获取调用者的调用者以获取Ruby异常

时间:2011-10-17 21:50:46

标签: ruby debugging sinatra

现在我们的应用程序正在Heroku上运行,为了节省重启和可能的延迟,应用程序旨在缓存所有错误并将它们发送到stderr,只是服务器过时的缓存,直到问题被另一个推送解决。这可以防止应用程序删除...

然而,日志不断填满我们不想要的整个跟踪,所以我构建了一个小片段(部分从Rails中被盗)来解析调用者并且只发送该行,但是从而发送错误救援,我们得到错误的线路,所以我想知道如何让呼叫者或呼叫者,或者是否有更好的方法来处理这种情况。这是片段:

module StdErr
  def error(message)
    file = 'Unknown'
    line = '0'

    if /^(.+?):(\d+)(?::in `(.*)')?/ =~ caller[1]
      file = $1
      line = $2
    end

    $stderr.puts "ERROR: #{message} on line #{line} of #{file}"
  end
end

2 个答案:

答案 0 :(得分:4)

caller返回一个数组,你可以通过查看它后面的元素深入调用堆栈(注意你正在查看caller[1]

答案 1 :(得分:4)

如果我得到它,你想要通过从调用者的调用者开始的回溯引发异常。这样做:

def raise_cc(*args)
  raise(*args)
rescue Exception
  # Raises the same exception, removing the last 2 items
  # from backtrace (this method and its caller). The first
  # will be the caller of the caller of this method.
  raise($!.class, $!.message, $!.backtrace[2..(-1)])
end