class RailsSemanticLogger::Sidekiq::JobLogger

Public Class Methods

new(*_args) click to toggle source

Sidekiq 6.5 does not take any arguments, whereas v7 is given a logger

# File lib/rails_semantic_logger/sidekiq/job_logger.rb, line 5
def initialize(*_args)
end

Public Instance Methods

call(item, queue, &block) click to toggle source
# File lib/rails_semantic_logger/sidekiq/job_logger.rb, line 8
def call(item, queue, &block)
  klass  = item["wrapped"] || item["class"]
  logger = klass ? SemanticLogger[klass] : Sidekiq.logger

  SemanticLogger.tagged(queue: queue) do
    # Latency is the time between when the job was enqueued and when it started executing.
    logger.info(
      "Start #perform",
      metric:        "sidekiq.queue.latency",
      metric_amount: job_latency_ms(item)
    )

    # Measure the duration of running the job
    logger.measure_info(
      "Completed #perform",
      on_exception_level: :error,
      log_exception:      :full,
      metric:             "sidekiq.job.perform",
      &block
    )
  end
end
prepare(job_hash, &block) click to toggle source
# File lib/rails_semantic_logger/sidekiq/job_logger.rb, line 31
def prepare(job_hash, &block)
  level = job_hash["log_level"]
  if level
    SemanticLogger.silence(level) do
      SemanticLogger.tagged(job_hash_context(job_hash), &block)
    end
  else
    SemanticLogger.tagged(job_hash_context(job_hash), &block)
  end
end

Private Instance Methods

job_hash_context(job_hash) click to toggle source
# File lib/rails_semantic_logger/sidekiq/job_logger.rb, line 44
def job_hash_context(job_hash)
  h         = {jid: job_hash["jid"]}
  h[:bid]   = job_hash["bid"] if job_hash["bid"]
  h[:tags]  = job_hash["tags"] if job_hash["tags"]
  h[:queue] = job_hash["queue"] if job_hash["queue"]
  h
end
job_latency_ms(job) click to toggle source
# File lib/rails_semantic_logger/sidekiq/job_logger.rb, line 52
def job_latency_ms(job)
  return unless job && job["enqueued_at"]

  (Time.now.to_f - job["enqueued_at"].to_f) * 1000
end