class SemanticLogger::Base

def backtrace(thread: Thread.current,

Log a thread backtrace
def backtrace(thread: Thread.current,
              level: :warn,
              message: "Backtrace:",
              payload: nil,
              metric: nil,
              metric_amount: nil)
  log = Log.new(name, level)
  return false unless meets_log_level?(log)
  backtrace =
    if thread == Thread.current
      Utils.extract_backtrace(caller)
    else
      log.thread_name = thread.name
      log.tags        = (thread[:semantic_logger_tags] || []).clone
      log.named_tags  = (thread[:semantic_logger_named_tags] || {}).clone
      thread.backtrace
    end
  # TODO: Keep backtrace instead of transforming into a text message at this point
  # Maybe log_backtrace: true
  if backtrace
    message += "\n"
    message << backtrace.join("\n")
  end
  if log.assign(message:       message,
                backtrace:     backtrace,
                payload:       payload,
                metric:        metric,
                metric_amount: metric_amount) && !filtered?(log)
    self.log(log)
  else
    false
  end
end