2012-08-30 138 views
1

我有一个JRuby/Rails应用程序,它包含一个Web服务器来处理HTTP请求,一个MySQL数据库和一个Resque worker来处理排入队列的作业。当我处于开发模式并且Web应用程序中的某些内容引发异常时,我会在浏览器中显示一条良好的跟踪,显示抛出的异常,抛出的异常行,相关数据以及堆栈追踪。Resque:异常和堆栈跟踪

但是,当异常抛出代码在Resque worker中执行时,即使我知道代码已引发异常,我也什么也得不到。我可以调试的唯一方法是在Resque工作者抛出异常并崩溃之前抛出打印语句并确定最后一次打印语句的调用位置。

有没有办法让Resque worker将异常日志和堆栈追溯吐出到日志文件中(在崩溃之前),以便我可以看到发生了什么?

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

+0

为什么不添加一个单独的记录器Resque和使用'开始救援'块捕获错误希望帮助 – Viren

+0

我不想乱抛我的代码寻找异常的开始/救援块。有一个中心位置,我可以放入一次,并获得整个覆盖面? –

+0

据我所知,你应该有一个失败的工作,应该也有一个有效的堆栈跟踪。你确定这与jruby无关吗? – phoet

回答

0

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

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

还有resque-backtrace宝石,虽然它有这个缺点,它覆盖在Resque后端所以现在没有工作也不会使其错误队列。