2009-04-19 28 views
6

有沒有一種庫或簡單的方法來捕獲Ruby程序中拋出的異常並將其記錄到文件中?我查看了log4rlogger,但兩者上的文檔都沒有提供任何有關如何執行此操作的示例。我遠程運行該程序,並丟失stdout和stderr的句柄,如果這些信息有幫助的話。在Ruby中自動記錄異常

你會推薦什麼?

回答

14

如果你想利用在野外散步,試試這個:

class Exception 
    alias real_init initialize 
    def initialize(*args) 
    real_init *args 
    # log the error (self) or its args here 
    end 
end 

這將攔截在制定的過程中新的異常對象的創建。

4

Exception救援。像這樣的東西可能是有道理的:

begin 
    # run your code here .. 
rescue Exception => exception 
    # logger.error(...) .... 
    raise exception 
end 

這將記錄異常,從而使應用程序實際上除了記錄引發錯誤重新提出。

exceptionException的實例,請查看the docs以獲取有關可以使用此對象(例如訪問回溯)的信息。

+1

嗯,這就是我害怕不得不做的。涉及的代碼基本上是一個類,其中有很多方法;我只需要在每種方法上開始/救援,還是有一種更簡單的方法? – 2009-04-19 22:31:47

+0

您可能在某處創建實例 - 將救援塊放置在創建實例的位置。 – 2009-04-19 22:36:31

+0

將它放在實例創建代碼上將不會有任何好處,除非在創建過程中出現錯誤。如果您想在全球範圍內捕捉任何錯誤,請包裝您的主體。 – MarkusQ 2009-04-19 22:49:57

0

將它的工作,如果我做了這樣的事情:

begin 
    main() 
rescue Exception => e 
    myCustomErrorLogger(e) 
end 

def main() 
    # All the application code comes here. 
end 

我需要的是有我的所有捕獲的異常移動到最頂層,並在那裏被抓,隨後由錯誤日誌記錄功能。

我現在正在嘗試這個,但它會很好,有你的建議。

0

您可以調整放置到stdout原因和回溯的部分中的Exception類的代碼。

不要忘記檢查記錄器是否可以爲空,可以在創建記錄器之前(或同時)拋出異常。