module GovukLogging::RailsExt::ActionDispatch
Public Class Methods
monkey_patch_log_error(clazz = ::ActionDispatch::DebugExceptions)
click to toggle source
# File lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb, line 28 def self.monkey_patch_log_error(clazz = ::ActionDispatch::DebugExceptions) clazz.class_eval do private def log_error(request, wrapper) logger = logger(request) return unless logger exception = wrapper.exception trace = wrapper.application_trace trace = wrapper.framework_trace if trace.empty? logger.fatal({ exception_class: exception.class.to_s, exception_message: exception.message, stacktrace: trace, }.to_json) end end end
should_monkey_patch_log_error?(clazz = ::ActionDispatch::DebugExceptions)
click to toggle source
# File lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb, line 6 def self.should_monkey_patch_log_error?(clazz = ::ActionDispatch::DebugExceptions) empty_instance = clazz.new nil target_method = empty_instance.method :log_error expected_parameters = [%i[req request], %i[req wrapper]] actual_parameters = target_method.parameters should_monkey_patch = actual_parameters == expected_parameters unless should_monkey_patch Rails.logger.warn "Refused to monkey patch ::ActionDispatch::DebugExceptions#log_error - " \ "signatures do not match. " \ "Expected #{expected_parameters}, but got #{actual_parameters}" end should_monkey_patch rescue StandardError => e Rails.logger.warn "Failed to detect whether to monkey patch " \ "::ActionDispatch::DebugExceptions#log_error - #{e.inspect}" false end
Public Instance Methods
log_error(request, wrapper)
click to toggle source
# File lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb, line 32 def log_error(request, wrapper) logger = logger(request) return unless logger exception = wrapper.exception trace = wrapper.application_trace trace = wrapper.framework_trace if trace.empty? logger.fatal({ exception_class: exception.class.to_s, exception_message: exception.message, stacktrace: trace, }.to_json) end