diff --git a/lib/appydays/loggable/sequel_logger.rb b/lib/appydays/loggable/sequel_logger.rb index 01c8f73..d958e99 100644 --- a/lib/appydays/loggable/sequel_logger.rb +++ b/lib/appydays/loggable/sequel_logger.rb @@ -13,12 +13,34 @@ class Sequel::Database # Use nil to disable the full message logging. module AppydaysLogger class << self - attr_accessor :truncate_messages_over, :truncation_message, :truncation_context, :log_full_message_level + # Messages more than this many characters are truncated. + # Defaults to 2000. + attr_accessor :truncate_messages_over + + # Placeholder message when truncation occurs. + # Defaults to ''. + attr_accessor :truncation_message + + # How many characters to preserve before and after truncation. + # Defaults to 200 (400 total). + attr_accessor :truncation_context + + # If set, log the full message at this level when truncation occurs. + # For example, a truncated message may be logged at :info, + # and the full message logged at +:default+. + # Defaults to +nil+ (does not log full messages when truncation occurs). + attr_accessor :log_full_message_level + + # Log slow queries at this level. + # See +Sequel::Database#log_warn_duration+. + # Default to +:warn+. + attr_accessor :slow_query_log_level def setdefaults @truncate_messages_over = 2000 - @truncation_message = "" + @truncation_message = "" @truncation_context = 200 + @slow_query_log_level = :warn end def truncate_message(message) @@ -58,7 +80,7 @@ def log_duration(duration, message) lwd = log_warn_duration was_truncated = false log_each( - lwd && (duration >= lwd) ? :warn : sql_log_level, + lwd && (duration >= lwd) ? AppydaysLogger.slow_query_log_level : sql_log_level, proc { "(#{'%0.6fs' % duration}) #{message}" }, proc do query = AppydaysLogger.truncate_message(message) diff --git a/lib/appydays/loggable/sidekiq_job_logger.rb b/lib/appydays/loggable/sidekiq_job_logger.rb index a49ca3a..6bebba3 100644 --- a/lib/appydays/loggable/sidekiq_job_logger.rb +++ b/lib/appydays/loggable/sidekiq_job_logger.rb @@ -20,6 +20,14 @@ class Appydays::Loggable::SidekiqJobLogger < Sidekiq::JobLogger Sidekiq.logger = self.logger + # Level to log 'job_done' messages at. + # Defaults to +:info+. + attr_accessor :log_level_job_done + + # Level to log slow jobs at. + # Defaults to +:warn+. + attr_accessor :log_level_slow_job + def call(item, _queue, &) start = self.now self.with_log_tags(job_id: item["jid"]) do @@ -38,7 +46,11 @@ def call(item, _queue, &) extra_tags = {job_class: item["class"], thread_id: self.tid} yield duration = self.elapsed(start) - log_method = duration >= self.slow_job_seconds ? :warn : :info + log_method = if duration >= self.slow_job_seconds + (self.log_level_slow_job || :warn) + else + (self.log_level_job_done || :info) + end self.logger.send(log_method, "job_done", duration: duration * 1000, **extra_tags, **self.class.job_tags) rescue StandardError # Do not log the error since it is probably a sidekiq retry error