3

因此,如果我的 Rails 应用程序中有未捕获的异常,它会被记录,并带有堆栈跟踪。

伟大的。但我实际上想关闭“INFO”级别的日志记录,只记录WARN/ERROR/FATAL。

这意味着,对于未捕获的异常,我真的希望它记录更多关于当前请求的信息,而不仅仅是异常名称和堆栈跟踪。我想要请求参数,请求 URI,我什至想要请求客户端 IP 和用户代理。

我很难找到要定制的 Rails 的哪个部分来获得这个。无论是单独通过配置还是通过覆盖方法,甚至通过猴子修补——我都无法弄清楚这实际上发生在哪里。

那是因为它在中间件中关闭了吗?呸! 无论哪种方式...有关实际执行此操作的最简单方法的任何提示?

(令人惊讶的是,Rails 并没有让这变得简单,不是吗?这似乎不是什么不寻常的事情?是因为每个关心的人都在使用一些第三方平台来捕获这些东西而不是日志文件吗?我不是,呵呵。)

4

2 回答 2

7

您可以通过使用rescue_from捕获所有异常来添加额外的异常处理。

例如,您可以将其添加到您的 application_controller.rb:

rescue_from Exception, :with => :internal_error

def internal_error(e)
   logger.error request.fullpath
   raise e
end

通过重新提出原始异常,您可以确保 rails 也能看到它。

于 2013-01-25T19:32:09.653 回答
2

请参阅https://github.com/rails/rails/issues/9343,目前尚不支持。似乎 DebugExceptions 中间件正在记录这一点。我看到 atm 的唯一解决方案是使用 config.middleware.swap 换出这个中间件并用自定义版本替换它。

于 2013-07-17T12:20:26.980 回答