【发布时间】:2010-10-20 10:49:18
【问题描述】:
是否有一个库或简单的方法来捕获 Ruby 程序中抛出的异常并将其记录到文件中?我查看了log4r 和logger,但两者的文档都没有提供任何关于我将如何执行此操作的示例。如果这些信息有帮助的话,我会远程运行这个程序并丢失 stdout 和 stderr 的句柄。
你会推荐什么?
【问题讨论】:
标签: ruby logging exception-handling
是否有一个库或简单的方法来捕获 Ruby 程序中抛出的异常并将其记录到文件中?我查看了log4r 和logger,但两者的文档都没有提供任何关于我将如何执行此操作的示例。如果这些信息有帮助的话,我会远程运行这个程序并丢失 stdout 和 stderr 的句柄。
你会推荐什么?
【问题讨论】:
标签: ruby logging exception-handling
如果你想在野外散步,试试这个:
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
我需要将所有未捕获的异常移到最顶层,并在那里被捕获并随后由错误日志记录功能记录。
我现在正在尝试,但如果有您的建议会很棒。
【讨论】:
您可以在将原因和回溯放入标准输出的部分中调整 Exception 类的代码。
不要忘记检查记录器是否可以为空,异常可以在记录器创建之前(或同时)抛出。
【讨论】: