class Moromi::Error::DefaultLogger

Constants

UNKNOWN

Public Instance Methods

write(controller, status, title, exception, options, locals) click to toggle source
# File lib/moromi/error/default_logger.rb, line 10
def write(controller, status, title, exception, options, locals)
  Moromi::Error.config.severity_mappings.each do |klass, severity|
    if exception.is_a? klass
      message = ([exception.message] + ::Rails.backtrace_cleaner.clean(Array(exception.backtrace).compact)).join('\n')
      Rails.logger.add severity, message
      return
    end
  end

  Rails.logger.add log_severity(exception), to_ltsv(controller, exception) unless skip?(exception)
  notify_exception(controller, exception)
rescue => e
  backtrace = ::Rails.backtrace_cleaner.clean(e.backtrace).join("\n").gsub("\n", '\n')
  Rails.logger.error "[#{self.class}#write] #{e.inspect} #{backtrace}"
end

Private Instance Methods

fetch_errors(exception) click to toggle source
# File lib/moromi/error/default_logger.rb, line 64
def fetch_errors(exception)
  return [exception.inspect] unless exception.respond_to?(:errors)

  exception.errors
end
log_severity(exception) click to toggle source
# File lib/moromi/error/default_logger.rb, line 58
def log_severity(exception)
  return Logger::Severity::ERROR unless exception.respond_to?(:log_severity)

  exception.log_severity
end
notify_exception(controller, exception) click to toggle source
# File lib/moromi/error/default_logger.rb, line 45
def notify_exception(controller, exception)
  return unless defined? ExceptionNotifier
  return unless Moromi::Error.config.use_exception_notifier

  ExceptionNotifier.notify_exception(exception, env: controller.request.env, data: {method: controller.request.method, url: controller.request.url})
end
skip?(exception) click to toggle source
# File lib/moromi/error/default_logger.rb, line 52
def skip?(exception)
  return false unless exception.respond_to?(:skip_logging?)

  exception.skip_logging?
end
to_ltsv(controller, exception) click to toggle source
# File lib/moromi/error/default_logger.rb, line 28
def to_ltsv(controller, exception)
  backtrace = (exception&.backtrace || []).compact
  information_builder = Moromi::Error.config.information_builder_klass.new(controller)

  messages = {
    error_class: exception.class,
    message: exception.message,
    errors: fetch_errors(exception).compact.join("\n").gsub("\n", '\n'),
    backtrace: ::Rails.backtrace_cleaner.clean(backtrace).join("\n").gsub("\n", '\n')
  }
  messages.merge!(information_builder.build)

  messages.map { |k, v| "#{k}:#{v}" }.join("\t")
rescue
  (exception&.backtrace || []).compact.join("\n").gsub("\n", '\n')
end