Class: ActiveRecord::SqlAnalyzer::RedactedLogger

Inherits:
CompactLogger show all
Defined in:
lib/active_record/sql_analyzer/redacted_logger.rb

Instance Attribute Summary

Attributes inherited from CompactLogger

#definition_log_file, #logged_shas

Attributes inherited from Logger

#config, #log_file, #log_prefix, #log_root

Instance Method Summary collapse

Methods inherited from CompactLogger

#close, #initialize, #log

Methods inherited from Logger

#close, #initialize, #log

Constructor Details

This class inherits a constructor from ActiveRecord::SqlAnalyzer::CompactLogger

Instance Method Details

#filter_caller(kaller) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/active_record/sql_analyzer/redacted_logger.rb', line 23

def filter_caller(kaller)
  kaller = if config[:ambiguous_tracers].any? { |regex| kaller.first =~ regex }
             kaller[0, config[:ambiguous_backtrace_lines]].join(", ")
           else
             kaller.first
           end

  return '' unless kaller

  config[:backtrace_redactors].each do |redactor|
    kaller.gsub!(redactor.search, redactor.replace)
  end

  kaller
end

#filter_event(event) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/active_record/sql_analyzer/redacted_logger.rb', line 4

def filter_event(event)
  # Determine if we're doing extended tracing or only the first
  calls = event.delete(:calls).map do |call|
    { sql: filter_sql(call[:sql]), caller: filter_caller(call[:caller]) }
  end

  # De-duplicate redacted calls to avoid many transactions with looping "N+1" queries.
  calls.uniq!

  event[:sql] = calls.map { |call| call[:sql] }
  event[:caller] = calls.map { |call| call[:caller] }.join(';; ')

  if event[:sql].size == 1
    event[:sql] = event[:sql].first
  else
    event[:sql] = event[:sql].join('; ') + ';'
  end
end

#filter_sql(sql) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/active_record/sql_analyzer/redacted_logger.rb', line 39

def filter_sql(sql)
  config[:sql_redactors].each do |redactor|
    sql.gsub!(redactor.search, redactor.replace)
  end

  sql
end