module Journald::Logger::Exceptionable

Public Instance Methods

exception(e, priority: nil, severity: nil) click to toggle source
# File lib/journald/modules/exceptionable.rb, line 4
def exception(e, priority: nil, severity: nil)
  priority ||= severity_to_priority(severity) || Journald::LOG_ERR
  real_exception(e, priority, false)
end

Private Instance Methods

real_exception(e, priority, is_cause) click to toggle source
# File lib/journald/modules/exceptionable.rb, line 11
def real_exception(e, priority, is_cause)
  # for Ruby 2.1 get cause if present
  cause = if e.respond_to? :cause; e.cause; end
  # for Ruby 2.1 get backtrace if present
  bt = e.respond_to?(:backtrace_locations) &&
       e.backtrace_locations &&
       e.backtrace_locations.length > 0

  tag_trace_location(e.backtrace_locations[0]) if bt

  send(
      priority:                 priority,
      message:                  "Exception #{e.inspect}",
      gem_logger_message_type:  is_cause ? 'ExceptionCause' : 'Exception',
      exception_class:          e.class.name,
      exception_message:        e.message,
      backtrace:                bt ? e.backtrace.join("\n"): nil,
      cause:                    cause ? cause.inspect : nil,
  )

  untag_trace_location if bt

  real_exception(cause, priority, true) if cause
end