现在我们的应用程序正在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
答案 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