Class: RailsSemanticLogger::ActiveRecord::LogSubscriber

Inherits:
ActiveSupport::LogSubscriber
  • Object
show all
Defined in:
lib/rails_semantic_logger/active_record/log_subscriber.rb

Constant Summary collapse

IGNORE_PAYLOAD_NAMES =
%w[SCHEMA EXPLAIN].freeze

Instance Method Summary collapse

Instance Method Details

#sql(event) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/rails_semantic_logger/active_record/log_subscriber.rb', line 44

def sql(event)
  return unless logger.debug?

  payload = event.payload
  name    = payload[:name]
  return if IGNORE_PAYLOAD_NAMES.include?(name)

  log_payload               = {sql: payload[:sql]}
  log_payload[:binds]       = bind_values(payload) unless (payload[:binds] || []).empty?
  log_payload[:allocations] = event.allocations
  log_payload[:cached]      = true if payload[:cached]
  if payload[:async]
    log_payload[:async]     = true
    log_payload[:lock_wait] = payload[:lock_wait] if payload[:lock_wait]
  end

  log = {
    message:  name,
    payload:  log_payload,
    duration: event.duration
  }

  # Log the location of the query itself.
  if logger.send(:level_index) >= SemanticLogger.backtrace_level_index
    log[:backtrace] = SemanticLogger::Utils.strip_backtrace(caller)
  end

  logger.debug(log)
end

#strict_loading_violation(event) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/rails_semantic_logger/active_record/log_subscriber.rb', line 28

def strict_loading_violation(event)
  return unless logger.debug?

  payload    = event.payload
  owner      = payload[:owner]
  reflection = payload[:reflection]

  log_payload = {owner: owner.name, association: reflection.name}
  log_payload[:class] = reflection.klass.name unless reflection.polymorphic?

  logger.debug(
    message: reflection.strict_loading_violation_message(owner),
    payload: log_payload
  )
end