class RailsSemanticLogger::Sequel::LogSubscriber

Attributes

logger[R]

Public Class Methods

count() click to toggle source
# File lib/rails_semantic_logger/sequel/log_subscriber.rb, line 25
def self.count
  RequestStore.fetch(:sql_count) { 0 }
end
count=(value) click to toggle source
# File lib/rails_semantic_logger/sequel/log_subscriber.rb, line 21
def self.count= value
  RequestStore.store[:sql_count] = value
end
reset_count() click to toggle source
# File lib/rails_semantic_logger/sequel/log_subscriber.rb, line 35
def self.reset_count
  previous = count
  self.count = 0
  previous
end
reset_runtime() click to toggle source
# File lib/rails_semantic_logger/sequel/log_subscriber.rb, line 29
def self.reset_runtime
  previous = runtime
  self.runtime = 0
  previous
end
runtime() click to toggle source
# File lib/rails_semantic_logger/sequel/log_subscriber.rb, line 16
def self.runtime
  # ::ActiveRecord::RuntimeRegistry.sql_runtime ||= 0
  RequestStore.fetch(:sql_runtime) { 0 }
end
runtime=(value) click to toggle source
# File lib/rails_semantic_logger/sequel/log_subscriber.rb, line 11
def self.runtime= value
  # ::ActiveRecord::RuntimeRegistry.sql_runtime = value
  RequestStore.store[:sql_runtime] = value
end

Public Instance Methods

sql(event) click to toggle source
# File lib/rails_semantic_logger/sequel/log_subscriber.rb, line 41
def sql event
  self.class.runtime += event.duration
  self.class.count += 1
  return unless logger.debug?

  payload = event.payload
  name = payload[:name]

  log_payload = {sql: payload[:sql].squeeze(" ")}
  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/sequel/log_subscriber.rb, line 69
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(payload) click to toggle source
# File lib/rails_semantic_logger/sequel/log_subscriber.rb, line 79
def bind_values payload
  binds = {}
  binds = "  " + payload[:binds].map { |col, v| [col.name, v] }
                                .inspect
  payload[:binds].each { |col, value| add_bind_value binds, col.name, value }
  binds
end
logger() click to toggle source
# File lib/rails_semantic_logger/sequel/log_subscriber.rb, line 75
def logger
  self.class.logger
end