mirror of https://github.com/rails/rails
Reduce log noise handling ActionController::RoutingErrors
Each time a missing route is hit 32 lines of internal rails traces are written to the log. This is overly verbose and doesn't offer any actionable information to the user. With this change we'll still write an error message showing the route error but the trace will be omitted.
This commit is contained in:
parent
f47be7bd96
commit
c8f4c53d55
|
@ -1,3 +1,7 @@
|
|||
* Reduced log noise handling ActionController::RoutingErrors.
|
||||
|
||||
*Alberto Fernández-Capel*
|
||||
|
||||
* Keep part when scope option has value
|
||||
|
||||
When a route was defined within an optional scope, if that route didn't
|
||||
|
|
|
@ -138,9 +138,7 @@ module ActionDispatch
|
|||
return unless logger
|
||||
|
||||
exception = wrapper.exception
|
||||
|
||||
trace = wrapper.application_trace
|
||||
trace = wrapper.framework_trace if trace.empty?
|
||||
trace = wrapper.exception_trace
|
||||
|
||||
ActiveSupport::Deprecation.silence do
|
||||
message = []
|
||||
|
|
|
@ -62,6 +62,12 @@ module ActionDispatch
|
|||
self.class.status_code_for_exception(unwrapped_exception.class.name)
|
||||
end
|
||||
|
||||
def exception_trace
|
||||
trace = application_trace
|
||||
trace = framework_trace if trace.empty? && !exception.is_a?(ActionController::RoutingError)
|
||||
trace
|
||||
end
|
||||
|
||||
def application_trace
|
||||
clean_backtrace(:silent)
|
||||
end
|
||||
|
|
|
@ -466,6 +466,8 @@ class DebugExceptionsTest < ActionDispatch::IntegrationTest
|
|||
end
|
||||
|
||||
test "logs exception backtrace when all lines silenced" do
|
||||
@app = DevelopmentApp
|
||||
|
||||
output = StringIO.new
|
||||
backtrace_cleaner = ActiveSupport::BacktraceCleaner.new
|
||||
backtrace_cleaner.add_silencer { true }
|
||||
|
@ -478,6 +480,27 @@ class DebugExceptionsTest < ActionDispatch::IntegrationTest
|
|||
assert_operator((output.rewind && output.read).lines.count, :>, 10)
|
||||
end
|
||||
|
||||
test "doesn't log the framework backtrace when error type is a routing error" do
|
||||
@app = ProductionApp
|
||||
|
||||
output = StringIO.new
|
||||
backtrace_cleaner = ActiveSupport::BacktraceCleaner.new
|
||||
backtrace_cleaner.add_silencer { true }
|
||||
|
||||
env = { "action_dispatch.show_exceptions" => true,
|
||||
"action_dispatch.logger" => Logger.new(output),
|
||||
"action_dispatch.backtrace_cleaner" => backtrace_cleaner }
|
||||
|
||||
assert_raises ActionController::RoutingError do
|
||||
get "/pass", headers: env
|
||||
end
|
||||
|
||||
log = output.rewind && output.read
|
||||
|
||||
assert_includes log, "ActionController::RoutingError (No route matches [GET] \"/pass\")"
|
||||
assert_equal 3, log.lines.count
|
||||
end
|
||||
|
||||
test "display backtrace when error type is SyntaxError" do
|
||||
@app = DevelopmentApp
|
||||
|
||||
|
|
Loading…
Reference in New Issue