class RailsSemanticLogger::ActionMailer::LogSubscriber

Public Instance Methods

deliver(event) click to toggle source
# File lib/rails_semantic_logger/action_mailer/log_subscriber.rb, line 7
def deliver(event)
  ex = event.payload[:exception_object]
  message_id = event.payload[:message_id]
  duration = event.duration.round(1)
  if ex
    log_with_formatter event: event, log_duration: true, level: :error do |_fmt|
      {
        message:   "Error delivering mail #{message_id} (#{duration}ms)",
        exception: ex
      }
    end
  else
    message =
      if event.payload[:perform_deliveries]
        "Delivered mail #{message_id} (#{duration}ms)"
      else
        "Skipped delivery of mail #{message_id} as `perform_deliveries` is false"
      end

    log_with_formatter event: event, log_duration: true do |_fmt|
      {message: message}
    end
  end
end
process(event) click to toggle source

An email was generated.

# File lib/rails_semantic_logger/action_mailer/log_subscriber.rb, line 33
def process(event)
  mailer   = event.payload[:mailer]
  action   = event.payload[:action]
  duration = event.duration.round(1)
  log_with_formatter event: event do |_fmt|
    {message: "#{mailer}##{action}: processed outbound mail in #{duration}ms"}
  end
end

Private Instance Methods

log_with_formatter(level: :info, **kw_args) { |fmt| ... } click to toggle source
# File lib/rails_semantic_logger/action_mailer/log_subscriber.rb, line 122
def log_with_formatter(level: :info, **kw_args)
  fmt = EventFormatter.new(**kw_args)
  msg = yield fmt
  logger.public_send(level, **msg, payload: fmt.payload)
end
logger() click to toggle source
# File lib/rails_semantic_logger/action_mailer/log_subscriber.rb, line 128
def logger
  ::ActionMailer::Base.logger
end