3

我有一个 JRuby/Rails 应用程序,它包含一个用于处理 HTTP 请求的 Web 服务器、一个 MySQL 数据库和一个用于处理排队作业的 Resque 工作程序。当我处于开发模式并且 Web 应用程序中的某些内容引发异常时,我会在浏览器中获得很好的跟踪,显示引发的异常、引发异常的行、相关数据和堆栈回溯。

然而,当抛出异常的代码在 Resque 工作者中执行时,我什么也得不到,即使我知道代码抛出了异常。我可以调试的唯一方法是抛出打印语句并找出在 Resque 工作人员抛出异常并崩溃之前调用最后一个打印语句的位置。

有没有办法让 Resque 工作人员吐出异常日志并将堆栈回溯到日志文件中(在它崩溃之前),这样我就可以看到发生了什么?

编辑 - (感谢@Viren 的想法) - 我不想用开始/救援块乱扔我的应用程序代码。我将把开始/救援代码放在某个地方,以确保记录异常回溯,但我不知道把它放在哪里。

4

1 回答 1

1

您可以将 Resque 记录器设置为使用 Rails 记录器。对于完整的堆栈跟踪,您可能希望将其设置为DEBUGlevel,这会打印出大量信息。你把它放在initializers/resque.rb

Resque.logger = Rails.logger
Resque.logger.level = Logger::DEBUG

还有resque-backtrace gem,虽然它有一个缺点,它会覆盖 Resque 中的后端,所以现在没有作业会进入错误队列。

于 2014-09-19T10:08:24.413 回答