Class: Sentry::Rails::LogSubscribers::ActionMailerSubscriber

Inherits:
Sentry::Rails::LogSubscriber show all
Includes:
ParameterFilter
Defined in:
lib/sentry/rails/log_subscribers/action_mailer_subscriber.rb

Overview

LogSubscriber for ActionMailer events that captures email delivery and processing events using Sentry’s structured logging system.

This subscriber captures deliver.action_mailer and process.action_mailer events and formats them with relevant email information while respecting PII settings.

Examples:

Usage

# Enable structured logging for ActionMailer
Sentry.init do |config|
  config.enable_logs = true
  config.rails.structured_logging = true
  config.rails.structured_logging.subscribers = { action_mailer: Sentry::Rails::LogSubscribers::ActionMailerSubscriber }
end

Constant Summary

Constants included from ParameterFilter

ParameterFilter::EMPTY_HASH

Constants inherited from Sentry::Rails::LogSubscriber

Sentry::Rails::LogSubscriber::ORIGIN

Instance Method Summary collapse

Methods included from ParameterFilter

backend, #filter_sensitive_params

Methods inherited from Sentry::Rails::LogSubscriber

#detach_from

Instance Method Details

#deliver(event) ⇒ Object

Handle deliver.action_mailer events



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/sentry/rails/log_subscribers/action_mailer_subscriber.rb', line 28

def deliver(event)
  payload = event.payload

  mailer = payload[:mailer]

  attributes = {
    mailer: mailer,
    duration_ms: duration_ms(event),
    perform_deliveries: payload[:perform_deliveries]
  }

  attributes[:delivery_method] = payload[:delivery_method] if payload[:delivery_method]
  attributes[:date] = payload[:date].to_s if payload[:date]

  if Sentry.configuration.send_default_pii
    attributes[:message_id] = payload[:message_id] if payload[:message_id]
  end

  message = "Email delivered via #{mailer}"

  # Log the structured event
  log_structured_event(
    message: message,
    level: :info,
    attributes: attributes
  )
end

#process(event) ⇒ Object

Handle process.action_mailer events



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/sentry/rails/log_subscribers/action_mailer_subscriber.rb', line 59

def process(event)
  payload = event.payload

  mailer = payload[:mailer]
  action = payload[:action]
  duration = duration_ms(event)

  attributes = {
    mailer: mailer,
    action: action,
    duration_ms: duration
  }

  if Sentry.configuration.send_default_pii && payload[:params]
    filtered_params = filter_sensitive_params(payload[:params])
    attributes[:params] = filtered_params unless filtered_params.empty?
  end

  message = "#{mailer}##{action}"

  log_structured_event(
    message: message,
    level: :info,
    attributes: attributes
  )
end