Module: Bugsnag

Defined in:
lib/bugsnag.rb,
lib/bugsnag/rack.rb,
lib/bugsnag/rails.rb,
lib/bugsnag/deploy.rb,
lib/bugsnag/resque.rb,
lib/bugsnag/cleaner.rb,
lib/bugsnag/helpers.rb,
lib/bugsnag/mailman.rb,
lib/bugsnag/railtie.rb,
lib/bugsnag/sidekiq.rb,
lib/bugsnag/version.rb,
lib/bugsnag/delivery.rb,
lib/bugsnag/meta_data.rb,
lib/bugsnag/capistrano2.rb,
lib/bugsnag/delay/resque.rb,
lib/bugsnag/notification.rb,
lib/bugsnag/configuration.rb,
lib/bugsnag/middleware_stack.rb,
lib/bugsnag/delivery/synchronous.rb,
lib/bugsnag/delivery/thread_queue.rb

Defined Under Namespace

Modules: Capistrano, Delay, Delivery, Helpers, MetaData, Middleware, Rails Classes: Cleaner, Configuration, Deploy, Mailman, MiddlewareStack, Notification, Rack, Railtie, Resque, Sidekiq

Constant Summary collapse

LOG_PREFIX =
"** [Bugsnag] "
LOCK =
Mutex.new
VERSION =
File.read(File.join(File.dirname(__FILE__), "../../VERSION")).strip

Class Method Summary collapse

Class Method Details

.after_notify_callbacksObject

Allow access to “after notify” callbacks



127
128
129
# File 'lib/bugsnag.rb', line 127

def after_notify_callbacks
  Bugsnag.configuration.request_data[:after_callbacks] ||= []
end

.auto_notify(exception, overrides = nil, request_data = nil, &block) ⇒ Object

Auto notify of an exception, called from rails and rack exception rescuers, unless auto notification is disabled, or we should ignore this error class



82
83
84
85
86
# File 'lib/bugsnag.rb', line 82

def auto_notify(exception, overrides=nil, request_data=nil, &block)
  overrides ||= {}
  overrides.merge!({:severity => "error"})
  notify_or_ignore(exception, overrides, request_data, &block) if configuration.auto_notify
end

.before_notify_callbacksObject

Allow access to “before notify” callbacks



122
123
124
# File 'lib/bugsnag.rb', line 122

def before_notify_callbacks
  Bugsnag.configuration.request_data[:before_callbacks] ||= []
end

.clear_request_dataObject

Clear all “per-request” data, temporal data for use in bugsnag middleware This method should be called after each distinct request or session ends Eg. After completing a page request in a web app



117
118
119
# File 'lib/bugsnag.rb', line 117

def clear_request_data
  Bugsnag.configuration.clear_request_data
end

.configurationObject

Configuration getters



104
105
106
107
# File 'lib/bugsnag.rb', line 104

def configuration
  @configuration = nil unless defined?(@configuration)
  @configuration || LOCK.synchronize { @configuration ||= Bugsnag::Configuration.new }
end

.configure(config_hash = nil) {|configuration| ... } ⇒ Object

Configure the Bugsnag notifier application-wide settings.

Yields:



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/bugsnag.rb', line 34

def configure(config_hash=nil)
  if config_hash
    config_hash.each do |k,v|
      configuration.send("#{k}=", v) rescue nil if configuration.respond_to?("#{k}=")
    end
  end

  yield(configuration) if block_given?

  # Use resque for asynchronous notification if required
  require "bugsnag/delay/resque" if configuration.delay_with_resque && defined?(Resque)

  # Log that we are ready to rock
  @logged_ready = false unless defined?(@logged_ready)

  if configuration.api_key && !@logged_ready
    log "Bugsnag exception handler #{VERSION} ready"
    @logged_ready = true
  end
end

.debug(message) ⇒ Object

Debug logger



99
100
101
# File 'lib/bugsnag.rb', line 99

def debug(message)
  configuration.logger.info("#{LOG_PREFIX}#{message}") if configuration.debug
end

.log(message) ⇒ Object

Log wrapper



89
90
91
# File 'lib/bugsnag.rb', line 89

def log(message)
  configuration.logger.info("#{LOG_PREFIX}#{message}")
end

.notify(exception, overrides = nil, request_data = nil) {|notification| ... } ⇒ Object

Explicitly notify of an exception

Yields:

  • (notification)


56
57
58
59
60
61
62
63
# File 'lib/bugsnag.rb', line 56

def notify(exception, overrides=nil, request_data=nil, &block)
  notification = Notification.new(exception, configuration, overrides, request_data)

  yield(notification) if block_given?

  notification.deliver
  notification
end

.notify_or_ignore(exception, overrides = nil, request_data = nil) {|notification| ... } ⇒ Object

Notify of an exception unless it should be ignored

Yields:

  • (notification)


66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/bugsnag.rb', line 66

def notify_or_ignore(exception, overrides=nil, request_data=nil, &block)
  notification = Notification.new(exception, configuration, overrides, request_data)

  yield(notification) if block_given?

  unless notification.ignore?
    notification.deliver
    notification
  else
    false
  end
end

.set_request_data(key, value) ⇒ Object

Set “per-request” data, temporal data for use in bugsnag middleware



110
111
112
# File 'lib/bugsnag.rb', line 110

def set_request_data(key, value)
  Bugsnag.configuration.set_request_data(key, value)
end

.warn(message) ⇒ Object

Warning logger



94
95
96
# File 'lib/bugsnag.rb', line 94

def warn(message)
  configuration.logger.warn("#{LOG_PREFIX}#{message}")
end