自定义rails未捕获的异常日志记录

时间:2012-12-03 20:55:02

标签: ruby-on-rails logging

因此,如果我的Rails应用程序中存在未捕获的异常,则会使用堆栈跟踪进行记录。

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

这意味着,对于未被删除的删除,我真的希望它能够更多地记录当前请求,而不仅仅是异常名称和堆栈跟踪。我想要请求参数,请求URI,我甚至想要请求客户端IP和用户代理。

我无法找到要自定义Rails的哪个部分来获取此功能。无论是单独使用配置还是通过覆盖方法,甚至通过猴子修补 - 我都无法确定实际发生的位置。

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

(令人惊讶的是,Rails不会让这很容易,不是吗?似乎并不是那么不寻常的事情?是因为每个关心的人都在使用某些第三方平台来捕获这些东西而不是日志文件吗?我不,嘿。)

2 个答案:

答案 0 :(得分:6)

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

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

rescue_from Exception, :with => :internal_error

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

通过重新提升原始异常,确保rails也能看到它。

答案 1 :(得分:2)

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