有沒有一種庫或簡單的方法來捕獲Ruby程序中拋出的異常並將其記錄到文件中?我查看了log4r和logger,但兩者上的文檔都沒有提供任何有關如何執行此操作的示例。我遠程運行該程序,並丟失stdout和stderr的句柄,如果這些信息有幫助的話。在Ruby中自動記錄異常
你會推薦什麼?
有沒有一種庫或簡單的方法來捕獲Ruby程序中拋出的異常並將其記錄到文件中?我查看了log4r和logger,但兩者上的文檔都沒有提供任何有關如何執行此操作的示例。我遠程運行該程序,並丟失stdout和stderr的句柄,如果這些信息有幫助的話。在Ruby中自動記錄異常
你會推薦什麼?
如果你想利用在野外散步,試試這個:
class Exception
alias real_init initialize
def initialize(*args)
real_init *args
# log the error (self) or its args here
end
end
這將攔截在制定的過程中新的異常對象的創建。
從Exception
救援。像這樣的東西可能是有道理的:
begin
# run your code here ..
rescue Exception => exception
# logger.error(...) ....
raise exception
end
這將記錄異常,從而使應用程序實際上除了記錄引發錯誤重新提出。
exception
是Exception
的實例,請查看the docs以獲取有關可以使用此對象(例如訪問回溯)的信息。
如果您正在運行Rails應用,則Exception Notification插件非常方便。
將它的工作,如果我做了這樣的事情:
begin
main()
rescue Exception => e
myCustomErrorLogger(e)
end
def main()
# All the application code comes here.
end
我需要的是有我的所有捕獲的異常移動到最頂層,並在那裏被抓,隨後由錯誤日誌記錄功能。
我現在正在嘗試這個,但它會很好,有你的建議。
您可以調整放置到stdout原因和回溯的部分中的Exception類的代碼。
不要忘記檢查記錄器是否可以爲空,可以在創建記錄器之前(或同時)拋出異常。
嗯,這就是我害怕不得不做的。涉及的代碼基本上是一個類,其中有很多方法;我只需要在每種方法上開始/救援,還是有一種更簡單的方法? – 2009-04-19 22:31:47
您可能在某處創建實例 - 將救援塊放置在創建實例的位置。 – 2009-04-19 22:36:31
將它放在實例創建代碼上將不會有任何好處,除非在創建過程中出現錯誤。如果您想在全球範圍內捕捉任何錯誤,請包裝您的主體。 – MarkusQ 2009-04-19 22:49:57