当我发送带有附件的电子邮件时,数据会以十六进制记录,并填满我的整个日志。有没有办法禁用附件的日志记录?
我知道我可以用config.action_mailer.logger = nil
禁用邮件记录。
不幸的是,如果日志记录级别设置为:debug
(非生产环境的默认级别),则附件会包含在日志中。这意味着,在生产中,您应该很好,但在测试过程中,您的开发和阶段环境可能会膨胀。您可以关闭整个应用程序(config.log_level = :info
)的日志记录,但这显然不太理想。
您可以配置自定义记录器:
config.action_mailer.logger = ActiveSupport::BufferedLogger.new("mailer.log")
config.action_mailer.logger.level = ActiveSupport::BufferedLogger::Severity::INFO
轨道4
config.action_mailer.logger = ActiveSupport::Logger.new("mailer.log")
config.action_mailer.logger.level = ActiveSupport::Logger::Severity::INFO
这将拆分日志,但您可以将日志级别的更改隔离到操作邮件程序。
如果您仍然希望调试日志级别,可以通过重写ActionMailer的LogSubscriber类从日志输出中删除附件。查看actionmailer gem中的类,并进行相应的调整。对于我的Rails 4.2.10安装,相关文件是:gems/actionmailer-4.2.10/lib/action_mailer/log_subscriber.rb
我的模块是:
module ActionMailer
class LogSubscriber < ActiveSupport::LogSubscriber
def deliver(event)
info do
recipients = Array(event.payload[:to]).join(', ')
"nSent mail to #{recipients}, Subject: #{event.payload[:subject]}, on #{event.payload[:date]} (#{event.duration.round(1)}ms)"
end
debug { remove_attachments(event.payload[:mail]) }
end
def remove_attachments(message)
new_message = ''
skip = false
message.each_line do |line|
new_message << line unless skip
skip = true if line =~ /Content-Disposition: attachment;/
skip = false if skip && line =~ /----==_mimepart/
end
new_message
end
end
end
将其保存到你的应用程序/文件夹下的.rb文件中,它就会被包含在内。
在Application.rb
中,您可以尝试过滤附件参数。我相信这应该能解决问题,但我自己还没有测试
config.filter_parameters += [:attachment]