2012-08-30 137 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後端所以現在沒有工作也不會使其錯誤隊列。