Class: Sequel::Database

Inherits:
Object
  • Object
show all
Defined in:
lib/appydays/loggable/sequel_logger.rb

Defined Under Namespace

Modules: AppydaysLogger

Instance Method Summary collapse

Instance Method Details

#log_duration(duration, message) ⇒ Object

Log message with message prefixed by duration at info level, or warn level if duration is greater than log_warn_duration.



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/appydays/loggable/sequel_logger.rb', line 57

def log_duration(duration, message)
  lwd = log_warn_duration
  was_truncated = false
  log_each(
    lwd && (duration >= lwd) ? :warn : sql_log_level,
    proc { "(#{'%0.6fs' % duration}) #{message}" },
    proc do
      query = AppydaysLogger.truncate_message(message)
      params = {duration: duration * 1000, query: query}
      if query != message
        params[:truncated] = true
        was_truncated = true
      end
      ["sequel_query", params]
    end,
  )
  return unless was_truncated && Sequel::Database::AppydaysLogger.log_full_message_level
  log_each(
    Sequel::Database::AppydaysLogger.log_full_message_level,
    nil,
    proc { ["sequel_query_debug", {duration: duration * 1000, query: message}] },
  )
end

#log_each(level, std, semantic) ⇒ Object



81
82
83
84
85
86
87
88
89
# File 'lib/appydays/loggable/sequel_logger.rb', line 81

def log_each(level, std, semantic)
  @loggers.each do |logger|
    if logger.is_a?(SemanticLogger::Base)
      logger.public_send(level, *semantic.call)
    elsif std
      logger.public_send(level, std.call)
    end
  end
end

#log_exception(exception, message) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/appydays/loggable/sequel_logger.rb', line 33

def log_exception(exception, message)
  level = message.match?(/^SELECT NULL AS "?nil"? FROM .* LIMIT 1$/i) ? :debug : :error
  log_each(
    level,
    proc { "#{exception.class}: #{exception.message.strip if exception.message}: #{message}" },
    proc { ["sequel_exception", {sequel_message: message}, exception] },
  )
end

#log_info(message, args = nil) ⇒ Object

Log a message at level info to all loggers.



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/appydays/loggable/sequel_logger.rb', line 43

def log_info(message, args=nil)
  log_each(
    :info,
    proc { args ? "#{message}; #{args.inspect}" : message },
    proc do
      o = {message: message}
      o[:args] = args unless args.nil?
      ["sequel_log", o]
    end,
  )
end