Merge pull request #49083 from 1st8/actionmailer-log-subscriber-log-errors
Log delivery errors in ActionMailer::LogSubscriber
This commit is contained in:
commit
d6d47fb027
@ -11,8 +11,9 @@ class LogSubscriber < ActiveSupport::LogSubscriber
|
|||||||
# An email was delivered.
|
# An email was delivered.
|
||||||
def deliver(event)
|
def deliver(event)
|
||||||
info do
|
info do
|
||||||
perform_deliveries = event.payload[:perform_deliveries]
|
if exception = event.payload[:exception_object]
|
||||||
if perform_deliveries
|
"Failed delivery of mail #{event.payload[:message_id]} error_class=#{exception.class} error_message=#{exception.message.inspect}"
|
||||||
|
elsif event.payload[:perform_deliveries]
|
||||||
"Delivered mail #{event.payload[:message_id]} (#{event.duration.round(1)}ms)"
|
"Delivered mail #{event.payload[:message_id]} (#{event.duration.round(1)}ms)"
|
||||||
else
|
else
|
||||||
"Skipped delivery of mail #{event.payload[:message_id]} as `perform_deliveries` is false"
|
"Skipped delivery of mail #{event.payload[:message_id]} as `perform_deliveries` is false"
|
||||||
|
@ -13,9 +13,12 @@ def setup
|
|||||||
ActionMailer::LogSubscriber.attach_to :action_mailer
|
ActionMailer::LogSubscriber.attach_to :action_mailer
|
||||||
end
|
end
|
||||||
|
|
||||||
class TestMailer < ActionMailer::Base
|
class BogusDelivery
|
||||||
def receive(mail)
|
def initialize(*)
|
||||||
# Do nothing
|
end
|
||||||
|
|
||||||
|
def deliver!(mail)
|
||||||
|
raise "failed"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -50,4 +53,17 @@ def test_deliver_message_when_perform_deliveries_is_false
|
|||||||
ensure
|
ensure
|
||||||
BaseMailer.deliveries.clear
|
BaseMailer.deliveries.clear
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_deliver_message_when_exception_happened
|
||||||
|
previous_delivery_method = BaseMailer.delivery_method
|
||||||
|
BaseMailer.delivery_method = BogusDelivery
|
||||||
|
|
||||||
|
assert_raises(RuntimeError) { BaseMailer.welcome(message_id: "123@abc").deliver_now }
|
||||||
|
wait
|
||||||
|
|
||||||
|
assert_equal(1, @logger.logged(:info).size)
|
||||||
|
assert_equal('Failed delivery of mail 123@abc error_class=RuntimeError error_message="failed"', @logger.logged(:info).first)
|
||||||
|
ensure
|
||||||
|
BaseMailer.delivery_method = previous_delivery_method
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user