class Sidekiq::JobLogger

Public Class Methods

new(logger = Sidekiq.logger) click to toggle source
# File lib/sidekiq/job_logger.rb, line 5
def initialize(logger = Sidekiq.logger)
  @logger = logger
end

Public Instance Methods

call(item, queue) { || ... } click to toggle source
# File lib/sidekiq/job_logger.rb, line 9
def call(item, queue)
  start = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
  @logger.info("start")

  yield

  with_elapsed_time_context(start) do
    @logger.info("done")
  end
rescue Exception
  with_elapsed_time_context(start) do
    @logger.info("fail")
  end

  raise
end
elapsed_time_context(start) click to toggle source
# File lib/sidekiq/job_logger.rb, line 53
def elapsed_time_context(start)
  {elapsed: elapsed(start).to_s}
end
job_hash_context(job_hash) click to toggle source
# File lib/sidekiq/job_logger.rb, line 37
def job_hash_context(job_hash)
  # If we're using a wrapper class, like ActiveJob, use the "wrapped"
  # attribute to expose the underlying thing.
  h = {
    class: job_hash["display_class"] || job_hash["wrapped"] || job_hash["class"],
    jid: job_hash["jid"]
  }
  h[:bid] = job_hash["bid"] if job_hash["bid"]
  h[:tags] = job_hash["tags"] if job_hash["tags"]
  h
end
prepare(job_hash, &block) click to toggle source
# File lib/sidekiq/job_logger.rb, line 26
def prepare(job_hash, &block)
  level = job_hash["log_level"]
  if level
    @logger.log_at(level) do
      Sidekiq::Context.with(job_hash_context(job_hash), &block)
    end
  else
    Sidekiq::Context.with(job_hash_context(job_hash), &block)
  end
end
with_elapsed_time_context(start, &block) click to toggle source
# File lib/sidekiq/job_logger.rb, line 49
def with_elapsed_time_context(start, &block)
  Sidekiq::Context.with(elapsed_time_context(start), &block)
end

Private Instance Methods

elapsed(start) click to toggle source
# File lib/sidekiq/job_logger.rb, line 59
def elapsed(start)
  (::Process.clock_gettime(::Process::CLOCK_MONOTONIC) - start).round(3)
end