summaryrefslogtreecommitdiff
path: root/lib/gitlab/sidekiq_logging
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-09-24 09:06:04 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2019-09-24 09:06:04 +0000
commitbc89882970d6a14b1f72eb9c715fae90b26d066c (patch)
treef5cb59d5130d7585980eb39437071e07ebc12f87 /lib/gitlab/sidekiq_logging
parent4a45a787703cb78c6101750cfbdc9f656b934b42 (diff)
downloadgitlab-ce-bc89882970d6a14b1f72eb9c715fae90b26d066c.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/sidekiq_logging')
-rw-r--r--lib/gitlab/sidekiq_logging/exception_handler.rb27
-rw-r--r--lib/gitlab/sidekiq_logging/structured_logger.rb7
2 files changed, 28 insertions, 6 deletions
diff --git a/lib/gitlab/sidekiq_logging/exception_handler.rb b/lib/gitlab/sidekiq_logging/exception_handler.rb
new file mode 100644
index 00000000000..fba74b6c9ed
--- /dev/null
+++ b/lib/gitlab/sidekiq_logging/exception_handler.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module SidekiqLogging
+ class ExceptionHandler
+ def call(job_exception, context)
+ data = {
+ error_class: job_exception.class.name,
+ error_message: job_exception.message
+ }
+
+ if context.is_a?(Hash)
+ data.merge!(context)
+ # correlation_id, jid, and class are available inside the job
+ # Hash, so promote these arguments to the root tree so that
+ # can be searched alongside other Sidekiq log messages.
+ job_data = data.delete(:job)
+ data.merge!(job_data) if job_data.present?
+ end
+
+ data[:error_backtrace] = Gitlab::Profiler.clean_backtrace(job_exception.backtrace) if job_exception.backtrace.present?
+
+ Sidekiq.logger.warn(data)
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/sidekiq_logging/structured_logger.rb b/lib/gitlab/sidekiq_logging/structured_logger.rb
index 48b1524f9c7..0a21e529ceb 100644
--- a/lib/gitlab/sidekiq_logging/structured_logger.rb
+++ b/lib/gitlab/sidekiq_logging/structured_logger.rb
@@ -58,8 +58,7 @@ module Gitlab
payload['message'] = "#{message}: fail: #{payload['duration']} sec"
payload['job_status'] = 'fail'
payload['error_message'] = job_exception.message
- payload['error'] = job_exception.class
- payload['error_backtrace'] = backtrace_cleaner.clean(job_exception.backtrace)
+ payload['error_class'] = job_exception.class.name
else
payload['message'] = "#{message}: done: #{payload['duration']} sec"
payload['job_status'] = 'done'
@@ -127,10 +126,6 @@ module Gitlab
Gitlab::Metrics::System.monotonic_time
end
- def backtrace_cleaner
- @backtrace_cleaner ||= ActiveSupport::BacktraceCleaner.new
- end
-
def format_time(timestamp)
return timestamp if timestamp.is_a?(String)