class PhusionPassenger::Rails3Extensions::AnalyticsLogging::ExceptionLogger

Public Class Methods

new(app, analytics_logger, app_group_name) click to toggle source
# File lib/phusion_passenger/rails3_extensions/init.rb, line 131
def initialize(app, analytics_logger, app_group_name)
        @app = app
        @analytics_logger = analytics_logger
        @app_group_name = app_group_name
end

Public Instance Methods

call(env) click to toggle source
# File lib/phusion_passenger/rails3_extensions/init.rb, line 137
def call(env)
        @app.call(env)
rescue Exception => e
        log_analytics_exception(env, e) if env[PASSENGER_TXN_ID]
        raise e
end

Private Instance Methods

log_analytics_exception(env, exception) click to toggle source
# File lib/phusion_passenger/rails3_extensions/init.rb, line 145
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