如何禁用生产日志文件中的Rails RoutingError stacktrace打印输出?

在我自豪的rails应用程序中,我得到了所有类型的随机攻击请求asp,zip和rar文件。 Rails按预期呈现404页面,但我的生产日志文件被如下所示的RoutingError stacktrace转储所堵塞。

我的问题是:我可以在Apache / Passenger中阻止某些模式的URL吗? 或者至少我可以配置Rails只记录错误本身而不是打印整个堆栈跟踪? 谢谢!

Processing ApplicationController#index (for 100.222.237.7 at 2011-03-22 10:59:54) [GET] ActionController::RoutingError (No route matches "/include/upfile_flash.asp" with {:host=>"www.myhost.com", :method=>:get, :domain=>"myhost.com", :subdomain=>"www"}): passenger (2.2.15) lib/phusion_passenger/rack/request_handler.rb:92:in `process_request' passenger (2.2.15) lib/phusion_passenger/abstract_request_handler.rb:207:in `main_loop' passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:441:in `start_request_handler' passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:381:in `handle_spawn_application' passenger (2.2.15) lib/phusion_passenger/utils.rb:252:in `safe_fork' passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:377:in `handle_spawn_application' passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `__send__' passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `main_loop' passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously' passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:163:in `start' passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:222:in `start' passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:253:in `spawn_rails_application' passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:126:in `lookup_or_add' passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:247:in `spawn_rails_application' passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:80:in `synchronize' passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize' passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:246:in `spawn_rails_application' passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:145:in `spawn_application' passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:278:in `handle_spawn_application' passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `__send__' passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `main_loop' passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously' Rendering /myapp/public/404.html (404 Not Found) 

您可以在所有其他路线之后添加捕获所有路线,以捕获此内容并呈现您选择的控制器/操作:

 match '*' => 'errors#not_found' 

如果你愿意,你甚至可以选择只匹配.asp或其他任何东西:

 match '*.:format' => 'errors#not_found', :constraints => {:format => /(asp|zip|rar)/i} 

Rails 4和5回答:

 match '*any', to: 'not_found#all', via: [:get, :post] 

要匹配通配符参数,必须为其分配一个名称 – 在这种情况下为any

 class NotFoundController < ApplicationController def any Logger.new('log/not_found.log').info(request.fullpath) # To render nothing: # head :not_found #Rails 5 # render nothing: true, status: :not_found # for Rails 4 #To render 404 page render file: 'public/404.html', status: :not_found, layout: false end end