Skip to content

Commit 87107b5

Browse files
committed
Sidekiq versions
1 parent 3a60945 commit 87107b5

File tree

3 files changed

+136
-19
lines changed

3 files changed

+136
-19
lines changed

lib/rails_semantic_logger/extensions/sidekiq/sidekiq_v4.rb

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,29 @@
44
# Sidekiq.configure_server do |config|
55
# SemanticLogger.add_appender(io: $stdout, level: :debug, formatter: :color)
66
# end
7+
require "sidekiq/exception_handler"
78
require "sidekiq/logging"
8-
# Replace Sidekiq context with Semantic Logger
9+
require "sidekiq/middleware/server/logging"
10+
require "sidekiq/processor"
11+
require "sidekiq/worker"
912
module Sidekiq
13+
# Replace Sidekiq context with Semantic Logger
1014
module Logging
1115
def self.with_context(msg, &block)
1216
SemanticLogger.tagged(msg, &block)
1317
end
1418
end
15-
end
1619

17-
require "sidekiq/processor"
18-
# Convert string to machine readable format
19-
module Sidekiq
20+
# Convert string to machine readable format
2021
class Processor
2122
def log_context(item)
22-
event = { jid: item["jid".freeze] }
23-
event[:bid] = item["bid".freeze] if item["bid".freeze]
23+
event = { jid: item["jid"] }
24+
event[:bid] = item["bid"] if item["bid"]
2425
event
2526
end
2627
end
27-
end
2828

29-
require "sidekiq/middleware/server/logging"
30-
# Let Semantic Logger handle duration logging
31-
module Sidekiq
29+
# Let Semantic Logger handle duration logging
3230
module Middleware
3331
module Server
3432
class Logging
@@ -46,11 +44,8 @@ def call(worker, item, queue)
4644
end
4745
end
4846
end
49-
end
5047

51-
require "sidekiq/worker"
52-
# Logging within each worker should use its own logger
53-
module Sidekiq
48+
# Logging within each worker should use its own logger
5449
module Worker
5550
attr_accessor :jid
5651

@@ -64,11 +59,8 @@ def self.included(base)
6459
base.class_attribute :sidekiq_retries_exhausted_block
6560
end
6661
end
67-
end
6862

69-
require "sidekiq/exception_handler"
70-
# Exception is already logged by Semantic Logger during the perform call
71-
module Sidekiq
63+
# Exception is already logged by Semantic Logger during the perform call
7264
module ExceptionHandler
7365
class Logger
7466
def call(ex, ctxHash)
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Sidekiq v5 patches
2+
#
3+
# To re-enable stdout logging for sidekiq server processes, add the following snippet to config/initializers/sidekiq.rb:
4+
# Sidekiq.configure_server do |config|
5+
# SemanticLogger.add_appender(io: $stdout, level: :debug, formatter: :color)
6+
# end
7+
require "sidekiq/exception_handler"
8+
require "sidekiq/job_logger"
9+
require "sidekiq/logging"
10+
require "sidekiq/worker"
11+
# Replace Sidekiq context with Semantic Logger
12+
module Sidekiq
13+
module Logging
14+
def self.with_context(msg, &block)
15+
SemanticLogger.tagged(msg, &block)
16+
end
17+
18+
def self.job_hash_context(job_hash)
19+
# If we're using a wrapper class, like ActiveJob, use the "wrapped"
20+
# attribute to expose the underlying thing.
21+
klass = job_hash["wrapped"] || job_hash["class"]
22+
event = { class: klass, jid: job_hash["jid"] }
23+
event[:bid] = job_hash["bid"] if job_hash["bid"]
24+
event
25+
end
26+
end
27+
28+
# Let Semantic Logger handle duration logging
29+
class JobLogger
30+
def call(item, queue)
31+
logger.info("Start #perform")
32+
klass = item["wrapped"] || item["class"]
33+
metric = "Sidekiq/#{klass}/perform" if klass
34+
logger.measure_info(
35+
"Completed #perform",
36+
on_exception_level: :error,
37+
log_exception: :full,
38+
metric: metric
39+
) do
40+
yield
41+
end
42+
end
43+
end
44+
45+
# Logging within each worker should use its own logger
46+
module Worker
47+
def self.included(base)
48+
raise ArgumentError, "You cannot include Sidekiq::Worker in an ActiveJob: #{base.name}" if base.ancestors.any? { |c| c.name == "ActiveJob::Base" }
49+
50+
base.extend(ClassMethods)
51+
base.include(SemanticLogger::Loggable)
52+
base.sidekiq_class_attribute :sidekiq_options_hash
53+
base.sidekiq_class_attribute :sidekiq_retry_in_block
54+
base.sidekiq_class_attribute :sidekiq_retries_exhausted_block
55+
end
56+
end
57+
58+
# Exception is already logged by Semantic Logger during the perform call
59+
module ExceptionHandler
60+
class Logger
61+
def call(ex, ctxHash)
62+
Sidekiq.logger.warn(ctxHash) if !ctxHash.empty?
63+
end
64+
end
65+
end
66+
end
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Sidekiq v6.2 patches
2+
#
3+
# To re-enable stdout logging for sidekiq server processes, add the following snippet to config/initializers/sidekiq.rb:
4+
# Sidekiq.configure_server do |config|
5+
# SemanticLogger.add_appender(io: $stdout, level: :debug, formatter: :color)
6+
# end
7+
require "sidekiq/exception_handler"
8+
require "sidekiq/job_logger"
9+
require "sidekiq/worker"
10+
module Sidekiq
11+
# Let Semantic Logger handle duration logging
12+
class JobLogger
13+
def call(item, queue)
14+
klass = item["wrapped"] || item["class"]
15+
metric = "Sidekiq/#{klass}/perform" if klass
16+
logger = klass ? SemanticLogger[klass] : Sidekiq.logger
17+
logger.info("Start #perform")
18+
logger.measure_info(
19+
"Completed #perform",
20+
on_exception_level: :error,
21+
log_exception: :full,
22+
metric: metric
23+
) do
24+
yield
25+
end
26+
end
27+
28+
def prepare(job_hash, &block)
29+
level = job_hash["log_level"]
30+
if level
31+
SemanticLogger.silence(level) do
32+
SemanticLogger.tagged(job_hash_context(job_hash), &block)
33+
end
34+
else
35+
SemanticLogger.tagged(job_hash_context(job_hash), &block)
36+
end
37+
end
38+
end
39+
40+
# Logging within each worker should use its own logger
41+
module Worker
42+
def self.included(base)
43+
raise ArgumentError, "Sidekiq::Worker cannot be included in an ActiveJob: #{base.name}" if base.ancestors.any? { |c| c.name == "ActiveJob::Base" }
44+
45+
base.include(Options)
46+
base.extend(ClassMethods)
47+
base.include(SemanticLogger::Loggable)
48+
end
49+
end
50+
51+
# Exception is already logged by Semantic Logger during the perform call
52+
module ExceptionHandler
53+
class Logger
54+
def call(ex, ctx)
55+
Sidekiq.logger.warn(ctx) if !ctx.empty?
56+
end
57+
end
58+
end
59+
end

0 commit comments

Comments
 (0)