mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
bd19d1baf1
The various LogSubscriber subclasses tend to subscribe to events but then end up doing nothing if the log level is high enough. But even if we end up not logging, we have to go through the entire notification path, record timing etc. By allowing subscribers to dynamically bail out early, we can save a lot of work if all subscribers are silenced.
41 lines
1.2 KiB
Ruby
41 lines
1.2 KiB
Ruby
# 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]
|
|
if perform_deliveries
|
|
"Delivered mail #{event.payload[:message_id]} (#{event.duration.round(1)}ms)"
|
|
else
|
|
"Skipped delivery of mail #{event.payload[:message_id]} as `perform_deliveries` is false"
|
|
end
|
|
end
|
|
|
|
debug { event.payload[:mail] }
|
|
end
|
|
subscribe_log_level :deliver, :debug
|
|
|
|
# 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
|
|
subscribe_log_level :process, :debug
|
|
|
|
# Use the logger configured for ActionMailer::Base.
|
|
def logger
|
|
ActionMailer::Base.logger
|
|
end
|
|
end
|
|
end
|
|
|
|
ActionMailer::LogSubscriber.attach_to :action_mailer
|