aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer/lib/action_mailer/log_subscriber.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionmailer/lib/action_mailer/log_subscriber.rb')
-rw-r--r--actionmailer/lib/action_mailer/log_subscriber.rb46
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