配置Rollbar忽略ActiveRecord::RecordNotFound异常无效,如何解决?
解决Rollbar仍上报ActiveRecord::RecordNotFound的问题
我之前也碰到过类似的情况,明明配置了过滤但还是有上报,你可以从这几个方面逐一排查:
确认配置位置和写法正确
一定要把过滤配置放在Rollbar.configure的块内部,而不是块外单独执行。正确的写法应该是这样:Rollbar.configure do |config| # 你的其他Rollbar基础配置(比如access_token等) config.exception_level_filters.merge!({ "ActiveRecord::RecordNotFound" => "ignore" }) end如果是在configure块外设置的,Rollbar初始化时可能不会读取到这条规则。
检查环境配置是否匹配
如果你是针对特定环境做的配置(比如只在生产环境设置),要确认当前运行的环境是否符合条件。比如如果你的代码是:if Rails.env.production? config.exception_level_filters.merge!({ "ActiveRecord::RecordNotFound" => "ignore" }) end那测试或开发环境依然会上报这个异常。
排查是否有代码覆盖了过滤规则
检查项目中有没有其他地方修改了exception_level_filters,比如后续代码重置了这个哈希,或者添加了冲突的规则。可以在Rails控制台里执行Rollbar.configuration.exception_level_filters,查看输出里是否包含"ActiveRecord::RecordNotFound" => "ignore"这一项。检查是否存在手动上报的情况
如果你的应用里用了rescue_from捕获这个异常,并且手动调用了Rollbar.error(e)之类的方法,那exception_level_filters是不会生效的——因为手动上报会绕过自动过滤规则。这种情况你需要修改rescue_from的逻辑,比如:rescue_from ActiveRecord::RecordNotFound do |e| # 先判断是否需要上报 level = Rollbar.configuration.exception_level_filters["ActiveRecord::RecordNotFound"] Rollbar.log(level, e) unless level == "ignore" # 其他处理逻辑(比如返回404页面) end尝试升级Rollbar版本
旧版本的Rollbar Ruby SDK可能存在过滤规则的bug,建议升级到最新的稳定版本后再测试。
内容的提问来源于stack exchange,提问作者jedi
相关产品推荐
相关产品推荐

