class Airbrake::AirbrakeLogger
Decorator for Logger
from stdlib. Endows loggers the ability to both log and report errors to Airbrake
.
@example
# Create a logger like you normally do and decorate it. logger = Airbrake::AirbrakeLogger.new(Logger.new(STDOUT)) # Just use the logger like you normally do. logger.fatal('oops')
Attributes
airbrake_level[R]
@return [Integer]
airbrake_notifier[RW]
@example
# Assign a default Airbrake notifier logger.airbrake_notifier = Airbrake[:default]
@return [Airbrake::Notifier] notifier to be used to send notices
Public Class Methods
new(logger)
click to toggle source
# File lib/airbrake/logger.rb, line 27 def initialize(logger) __setobj__(logger) @airbrake_notifier = Airbrake[:default] @airbrake_level = Logger::WARN end
Public Instance Methods
airbrake_level=(level)
click to toggle source
Sets airbrake severity level. Does not permit values below `Logger::WARN`.
@example
logger.airbrake_level = Logger::FATAL
@return [void]
# File lib/airbrake/logger.rb, line 67 def airbrake_level=(level) if level < Logger::WARN raise "Airbrake severity level #{level} is not allowed. " \ "Minimum allowed level is #{Logger::WARN}" end @airbrake_level = level end
error(progname = nil, &block)
click to toggle source
@see Logger#error
Calls superclass method
# File lib/airbrake/logger.rb, line 42 def error(progname = nil, &block) notify_airbrake(Logger::ERROR, progname) super end
fatal(progname = nil, &block)
click to toggle source
@see Logger#fatal
Calls superclass method
# File lib/airbrake/logger.rb, line 49 def fatal(progname = nil, &block) notify_airbrake(Logger::FATAL, progname) super end
unknown(progname = nil, &block)
click to toggle source
@see Logger#unknown
Calls superclass method
# File lib/airbrake/logger.rb, line 56 def unknown(progname = nil, &block) notify_airbrake(Logger::UNKNOWN, progname) super end
warn(progname = nil, &block)
click to toggle source
@see Logger#warn
Calls superclass method
# File lib/airbrake/logger.rb, line 35 def warn(progname = nil, &block) notify_airbrake(Logger::WARN, progname) super end
Private Instance Methods
normalize_severity(severity)
click to toggle source
# File lib/airbrake/logger.rb, line 93 def normalize_severity(severity) (case severity when Logger::WARN then 'warning' when Logger::ERROR, Logger::UNKNOWN then 'error' when Logger::FATAL then 'critical' else raise "Unknown airbrake severity: #{severity}" end).freeze end
notify_airbrake(severity, progname)
click to toggle source
# File lib/airbrake/logger.rb, line 77 def notify_airbrake(severity, progname) return if severity < @airbrake_level || !@airbrake_notifier @airbrake_notifier.notify(progname) do |notice| # Get rid of unwanted internal Logger frames. Examples: # * /ruby-2.4.0/lib/ruby/2.4.0/logger.rb # * /gems/activesupport-4.2.7.1/lib/active_support/logger.rb backtrace = notice[:errors].first[:backtrace] notice[:errors].first[:backtrace] = backtrace.drop_while { |frame| frame[:file] =~ %r{/logger.rb\z} } notice[:context][:component] = 'log' notice[:context][:severity] = normalize_severity(severity) end end