在日志中隐藏与资产相关的ActionController::RoutingError错误消息

4

我正在开发一个Rails应用程序,其中包含一个WP首页,还有一些从WP加载的图像。在本地主机上,我们无法访问WP内容,这导致日志中出现了很多路由错误,例如:

Started GET "/wp-content/uploads/2014/03/facebook-icon1.png" for 127.0.0.1 at 2015-11-20 15:10:48 +0200

ActionController::RoutingError (No route matches [GET] "/wp-content/uploads/2014/03/facebook-icon1.png"):
  actionpack (4.2.5) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  actionpack (4.2.5) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'

考虑到页面上有5张图片,每个请求都会导致5个路由错误。在开发环境中,如何隐藏这些类型的错误并避免记录日志?


尝试这个:config.assets.logger = nil - Pardeep Dhingra
1
@PardeepDhingra 不起作用。 - rmagnum2002
2个回答

14

我曾经遇到过这个问题。在您的initializers文件夹中创建一个logger.rb文件并添加以下代码:

# spammers were blowing up our logs
# this suppresses routing errors
if Rails.env.production?
    class ActionDispatch::DebugExceptions
      alias_method :old_log_error, :log_error
      def log_error(env, wrapper)
        if wrapper.exception.is_a?  ActionController::RoutingError
          return
        else
          old_log_error env, wrapper
        end
      end
    end
end

删除条件“if Rails.env.production?”,这将在所有环境中抑制路由错误。 - Joshua
我只需要用于开发,所以我使用了 if Rails.env.development?。 此外,正如您在上面发布的 gist 中所看到的,它仍会生成日志,比之前短一些,但仍然有一些痕迹。 有没有完全删除它们的机会..只留下请求..谢谢。 - rmagnum2002
1
是的,这段代码很容易适应于过滤掉您想要的任何日志类型,或者您可以将其更改为仅记录某些类型。如果您花点时间阅读代码,就可以看到它在哪里决定不记录并返回,或继续发送信息到日志中。根据需要进行更改。 - Joshua

2
也许这个silencer宝石可以帮到你。
用法:
在你的环境中:
require 'silencer/logger'

config.middleware.swap Rails::Rack::Logger, Silencer::Logger, :silence => [%r{^/wp-content/}]

2
你能更加精确地说明吗?它具体是做什么的?原帖作者需要如何使用它?等等。请附上代码示例。 - Thomas Baruchel
不行,我甚至尝试了消除所有GET请求,以测试这是否起作用。 - rmagnum2002
很抱歉听到这个消息。我安装了这个 gem,将配置添加到我的 application.rb 中,它对我来说运行良好。 - dinglixiang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接