class ExceptionNotifier::GraylogNotifier
Public Class Methods
new(options = {})
click to toggle source
# File lib/exception_notifier/graylog_notifier.rb, line 5 def initialize(options = {}) standard_args = { :hostname => "localhost", :port => 12201, :local_app_name => Socket::gethostname, :facility => 'gelf_exceptions', :max_chunk_size => 'LAN', :level => 3 } @args = standard_args.merge(options) @notifier = GELF::Notifier.new(@args[:hostname], @args[:port], @args[:max_chunk_size]) end
Public Instance Methods
call(err, options={})
click to toggle source
# File lib/exception_notifier/graylog_notifier.rb, line 19 def call(err, options={}) env = options[:env] begin opts = { :short_message => err.message, :facility => @args[:facility], :level => @args[:level], :host => @args[:local_app_name], :app_name=>@args[:app_name] } if err.backtrace && err.backtrace.size > 0 bc = ActiveSupport::BacktraceCleaner.new bc.add_filter { |line| line.gsub(Rails.root.to_s, '') } bc.add_silencer { |line| line =~ /mongrel|rvm\/gems|rubygems/ } _backtrace = bc.clean(err.backtrace)||[] if _backtrace.size>0 opts = opts.merge ({ :full_message => _backtrace.join("\n"), :file => _backtrace[0].split(":")[0], :line => _backtrace[0].split(":")[1], }) end end unless env.nil? request = ActionDispatch::Request.new(env) request_items = {:url => request.original_url, :http_method => request.method, :ip_address => request.remote_ip, :parameters => request.filtered_parameters, :timestamp => Time.current} opts[:request] = request_items opts[:session] = request.session opts[:cookies] = request.cookies # opts[:environment] = request.filtered_env end @notifier.notify!(opts) rescue Exception => i_err puts "Graylog2 Exception logger. Could not send message: " + i_err.message end end