class Logtail::Integrations::Rails::ErrorEvent
A Rack middleware that is responsible for capturing exception and error events {Logtail::Events::Error}.
Constants
- EXCEPTION_WRAPPER_TAKES_CLEANER
We determine this when the app loads to avoid the overhead on a per request basis.
Public Instance Methods
call(env)
click to toggle source
# File lib/logtail-rails/error_event.rb, line 22 def call(env) begin status, headers, body = @app.call(env) rescue Exception => exception Config.instance.logger.fatal do backtrace = extract_backtrace(env, exception) Events::Error.new( name: exception.class.name, error_message: exception.message, backtrace: backtrace ) end raise exception end end
Private Instance Methods
extract_backtrace(env, exception)
click to toggle source
Rails
provides a backtrace cleaner, so we use it here.
# File lib/logtail-rails/error_event.rb, line 42 def extract_backtrace(env, exception) if defined?(::ActionDispatch::ExceptionWrapper) wrapper = if EXCEPTION_WRAPPER_TAKES_CLEANER request = Util::Request.new(env) backtrace_cleaner = request.get_header("action_dispatch.backtrace_cleaner") ::ActionDispatch::ExceptionWrapper.new(backtrace_cleaner, exception) else ::ActionDispatch::ExceptionWrapper.new(env, exception) end trace = wrapper.application_trace trace = wrapper.framework_trace if trace.empty? trace else exception.backtrace end end