class RailsSemanticLogger::ActiveRecord::LogSubscriber
Constants
- IGNORE_PAYLOAD_NAMES
Attributes
logger[R]
Public Class Methods
reset_runtime()
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 18 def self.reset_runtime rt = runtime self.runtime = 0 rt end
runtime()
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 14 def self.runtime ::ActiveRecord::RuntimeRegistry.sql_runtime ||= 0 end
runtime=(value)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 10 def self.runtime=(value) ::ActiveRecord::RuntimeRegistry.sql_runtime = value end
Public Instance Methods
sql(event)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 24 def sql(event) self.class.runtime += event.duration 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 if event.respond_to?(:allocations) log_payload[:cached] = event.payload[:cached] 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
Private Instance Methods
add_bind_value(binds, key, value)
click to toggle source
When multiple values are received for a single bound field, it is converted into an array
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 56 def add_bind_value(binds, key, value) key = key.downcase.to_sym unless key.nil? value = (Array(binds[key]) << value) if binds.key?(key) binds[key] = value end
bind_values_v3(payload)
click to toggle source
Rails
3,4,5 hell trying to get the bind values
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 70 def bind_values_v3(payload) binds = {} payload[:binds].each do |col, v| if col add_bind_value(binds, col.name, v) else binds[nil] = v end end binds end
Also aliased as: bind_values
bind_values_v4(payload)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 82 def bind_values_v4(payload) binds = {} payload[:binds].each do |col, v| attr_name, value = render_bind(col, v) add_bind_value(binds, attr_name, value) end binds end
Also aliased as: bind_values
bind_values_v5_0_0(payload)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 91 def bind_values_v5_0_0(payload) binds = {} payload[:binds].each do |attr| attr_name, value = render_bind(attr) add_bind_value(binds, attr_name, value) end binds end
Also aliased as: bind_values
bind_values_v5_0_3(payload)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 100 def bind_values_v5_0_3(payload) binds = {} casted_params = type_casted_binds(payload[:binds], payload[:type_casted_binds]) payload[:binds].zip(casted_params).map do |attr, value| attr_name, value = render_bind(attr, value) add_bind_value(binds, attr_name, value) end binds end
Also aliased as: bind_values
bind_values_v5_1_5(payload)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 110 def bind_values_v5_1_5(payload) binds = {} casted_params = type_casted_binds(payload[:type_casted_binds]) payload[:binds].zip(casted_params).map do |attr, value| attr_name, value = render_bind(attr, value) add_bind_value(binds, attr_name, value) end binds end
Also aliased as: bind_values
bind_values_v6_1(payload)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 120 def bind_values_v6_1(payload) binds = {} casted_params = type_casted_binds(payload[:type_casted_binds]) payload[:binds].each_with_index do |attr, i| attr_name, value = render_bind(attr, casted_params[i]) add_bind_value(binds, attr_name, value) end binds end
Also aliased as: bind_values
logger()
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 62 def logger self.class.logger end
render_bind_v4_2(column, value)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 130 def render_bind_v4_2(column, value) if column if column.binary? # This specifically deals with the PG adapter that casts bytea columns into a Hash. value = value[:value] if value.is_a?(Hash) value = value ? "<#{value.bytesize} bytes of binary data>" : "<NULL binary data>" end [column.name, value] else [nil, value] end end
Also aliased as: render_bind
render_bind_v5_0_0(attribute)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 144 def render_bind_v5_0_0(attribute) value = if attribute.type.binary? && attribute.value if attribute.value.is_a?(Hash) "<#{attribute.value_for_database.to_s.bytesize} bytes of binary data>" else "<#{attribute.value.bytesize} bytes of binary data>" end else attribute.value_for_database end [attribute.name, value] end
Also aliased as: render_bind
render_bind_v5_0_3(attr, value)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 159 def render_bind_v5_0_3(attr, value) if attr.is_a?(Array) attr = attr.first elsif attr.type.binary? && attr.value value = "<#{attr.value_for_database.to_s.bytesize} bytes of binary data>" end [attr&.name, value] end
Also aliased as: render_bind, render_bind
render_bind_v6_1(attr, value)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 169 def render_bind_v6_1(attr, value) case attr when ActiveModel::Attribute value = "<#{attr.value_for_database.to_s.bytesize} bytes of binary data>" if attr.type.binary? && attr.value when Array attr = attr.first else attr = nil end [attr&.name || :nil, value] end
Also aliased as: render_bind
type_casted_binds_v5_0_3(binds, casted_binds)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 182 def type_casted_binds_v5_0_3(binds, casted_binds) casted_binds || ::ActiveRecord::Base.connection.type_casted_binds(binds) end
Also aliased as: type_casted_binds
type_casted_binds_v5_1_5(casted_binds)
click to toggle source
# File lib/rails_semantic_logger/active_record/log_subscriber.rb, line 186 def type_casted_binds_v5_1_5(casted_binds) casted_binds.respond_to?(:call) ? casted_binds.call : casted_binds end
Also aliased as: type_casted_binds, type_casted_binds