Defect #30457

MailHandler.safe_receive does not output any error log

Added by Go MAEDA about 1 month ago. Updated about 1 month ago.

Status:NewStart date:
Priority:NormalDue date:
Assignee:-% Done:

0%

Category:Email receiving
Target version:4.1.0
Resolution: Affected version:

Description

MailHandler.safe_receive has a rescue clause that seems to be intended to catch all exceptions and log it.

  def self.safe_receive(*args)
    receive(*args)
  rescue Exception => e
    logger.error "MailHandler: an unexpected error occurred when receiving email: #{e.message}" if logger
    return false
  end

However, the expression "logger.error" does not log any events because the variable logger is undefined. Although there is a method definition for "logger" at source:tags/4.0.0/app/models/mail_handler.rb#L77, you cannot call the method from MailHandler.safe_receive because MailHandler.safe_receive is a class method and MailHandler#logger is an instance method.

As a result, the expression logger.error in MailHandler#safe_receive never logs errors because the expression itself causes NameError. To avoid this, logger should be replaced with Rails.logger. The attached patch fixes this issue.

fix-safe_receive-logging-error.diff Magnifier (6.27 KB) Go MAEDA, 2019-01-17 17:58


Related issues

Related to Redmine - Patch #11497: Dry up logging in MailHandler class New
Duplicated by Redmine - Defect #28874: MailHandler does not log exceptions caught Closed

History

#1 Updated by Go MAEDA about 1 month ago

  • Target version set to 4.1.0

Setting the target version to 4.1.0.

#2 Updated by Go MAEDA 12 days ago

  • Duplicated by Defect #28874: MailHandler does not log exceptions caught added

#3 Updated by Go MAEDA 12 days ago

  • Related to Patch #11497: Dry up logging in MailHandler class added

Also available in: Atom PDF