Method: Chef::Application.debug_stacktrace

Defined in:
lib/chef/application.rb

.debug_stacktrace(e) ⇒ Object



366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
# File 'lib/chef/application.rb', line 366

def debug_stacktrace(e)
  message = "#{e.class}: #{e}\n#{e.backtrace.join("\n")}"

  cause = e.cause if e.respond_to?(:cause)
  until cause.nil?
    message << "\n\n>>>> Caused by #{cause.class}: #{cause}\n#{cause.backtrace.join("\n")}"
    cause = cause.respond_to?(:cause) ? cause.cause : nil
  end

  chef_stacktrace_out = "Generated at #{Time.now}\n"
  chef_stacktrace_out += message

  Chef::FileCache.store("#{ChefUtils::Dist::Infra::SHORT}-stacktrace.out", chef_stacktrace_out)
  logger.fatal("Stacktrace dumped to #{Chef::FileCache.load("#{ChefUtils::Dist::Infra::SHORT}-stacktrace.out", false)}")
  logger.fatal("---------------------------------------------------------------------------------------")
  logger.fatal("PLEASE PROVIDE THE CONTENTS OF THE stacktrace.out FILE (above) IF YOU FILE A BUG REPORT")
  logger.fatal("---------------------------------------------------------------------------------------")
  if Chef::Config[:always_dump_stacktrace]
    logger.fatal(message)
  else
    logger.debug(message)
  end
  true
end