diff options
Diffstat (limited to 'actionmailer/lib/action_mailer/log_subscriber.rb')
-rw-r--r-- | actionmailer/lib/action_mailer/log_subscriber.rb | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/actionmailer/lib/action_mailer/log_subscriber.rb b/actionmailer/lib/action_mailer/log_subscriber.rb new file mode 100644 index 0000000000..25c99342c2 --- /dev/null +++ b/actionmailer/lib/action_mailer/log_subscriber.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +require "active_support/log_subscriber" + +module ActionMailer + # Implements the ActiveSupport::LogSubscriber for logging notifications when + # email is delivered or received. + class LogSubscriber < ActiveSupport::LogSubscriber + # An email was delivered. + def deliver(event) + info do + perform_deliveries = event.payload[:perform_deliveries] + recipients = Array(event.payload[:to]).join(", ") + if perform_deliveries + "Sent mail to #{recipients} (#{event.duration.round(1)}ms)" + else + "Skipped sending mail to #{recipients} as `perform_deliveries` is false" + end + end + + debug { event.payload[:mail] } + end + + # An email was received. + def receive(event) + info { "Received mail (#{event.duration.round(1)}ms)" } + debug { event.payload[:mail] } + end + + # An email was generated. + def process(event) + debug do + mailer = event.payload[:mailer] + action = event.payload[:action] + "#{mailer}##{action}: processed outbound mail in #{event.duration.round(1)}ms" + end + end + + # Use the logger configured for ActionMailer::Base. + def logger + ActionMailer::Base.logger + end + end +end + +ActionMailer::LogSubscriber.attach_to :action_mailer |