class PhusionPassenger::ActiveSupport3Extensions::AnalyticsLogging::ExceptionLogger
def call(env)
def call(env) @app.call(env) rescue Exception => e log_analytics_exception(env, e) if env[PASSENGER_TXN_ID] raise e end
def initialize(app, analytics_logger, app_group_name)
def initialize(app, analytics_logger, app_group_name) @app = app @analytics_logger = analytics_logger @app_group_name = app_group_name end
def log_analytics_exception(env, exception)
def log_analytics_exception(env, exception) log = @analytics_logger.new_transaction( @app_group_name, :exceptions, env[PASSENGER_UNION_STATION_KEY]) begin request = ActionDispatch::Request.new(env) if request.parameters['controller'] controller = request.parameters['controller'].humanize + "Controller" action = request.parameters['action'] end request_txn_id = env[PASSENGER_TXN_ID] message = exception.message message = exception.to_s if message.empty? message = [message].pack('m') message.gsub!("\n", "") backtrace_string = [exception.backtrace.join("\n")].pack('m') backtrace_string.gsub!("\n", "") if action && controller controller_action = "#{controller}##{action}" else controller_action = controller end log.message("Request transaction ID: #{request_txn_id}") log.message("Message: #{message}") log.message("Class: #{exception.class.name}") log.message("Backtrace: #{backtrace_string}") log.message("Controller action: #{controller_action}") if controller_action ensure log.close end end