Module: LogStruct::Integrations::Sidekiq

Extended by:
IntegrationInterface, T::Sig
Defined in:
lib/log_struct/integrations/sidekiq.rb,
lib/log_struct/integrations/sidekiq/logger.rb,
lib/log_struct/integrations/sidekiq/job_context_middleware.rb

Overview

Sidekiq integration for structured logging

Defined Under Namespace

Classes: JobContextMiddleware, Logger

Constant Summary collapse

JOB_ERROR_HANDLER =
T.let(
  ->(error, context, _config = nil) { log_job_error(error, context) },
  T.proc.params(error: Exception, context: T::Hash[T.untyped, T.untyped], config: T.untyped).void
)

Class Method Summary collapse

Methods included from IntegrationInterface

setup

Class Method Details

.configure_logger ⇒ void

This method returns an undefined value.

Use LogStruct's logger for Sidekiq's own lines. The Railtie calls this as soon as it replaces Rails.logger, before config/initializers run, because an initializer that configures Sidekiq (connecting to Redis, setting up a fetcher) logs with Sidekiq's logger straight away.



48
49
50
51
52
53
54
55
56
57
# File 'lib/log_struct/integrations/sidekiq.rb', line 48

def self.configure_logger
  return unless defined?(::Sidekiq)

  current = sidekiq_logger_config.logger
  return if current.is_a?(LogStruct::Integrations::Sidekiq::Logger)

  @original_logger = current
  name = ::Sidekiq.server? ? "Sidekiq-Server" : "Sidekiq-Client"
  sidekiq_logger_config.logger = LogStruct::Integrations::Sidekiq::Logger.new(name)
end

.restore_logger ⇒ void

This method returns an undefined value.

Put Sidekiq's own logger back, when an initializer turned LogStruct or this integration off after configure_logger ran



62
63
64
65
66
67
68
# File 'lib/log_struct/integrations/sidekiq.rb', line 62

def self.restore_logger
  return unless defined?(::Sidekiq)
  return if @original_logger.nil?

  sidekiq_logger_config.logger = @original_logger
  @original_logger = nil
end

.setup(config) ⇒ Boolean?

Set up Sidekiq structured logging

Parameters:

Returns:

  • (Boolean, nil)


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/log_struct/integrations/sidekiq.rb', line 25

def self.setup(config)
  return nil unless defined?(::Sidekiq)
  return nil unless config.enabled
  return nil unless config.integrations.enable_sidekiq

  configure_logger

  ::Sidekiq.configure_server do |sidekiq_config|
    # First in the chain, so lines logged by other middleware include the job too
    sidekiq_config.server_middleware do |chain|
      chain.prepend LogStruct::Integrations::Sidekiq::JobContextMiddleware
    end

    replace_default_error_handler(sidekiq_config)
  end

  true
end

.tid ⇒ String

Get thread ID for Sidekiq logging

Returns:

  • (String)


15
16
17
# File 'lib/log_struct/integrations/sidekiq/logger.rb', line 15

def self.tid
  Thread.current["sidekiq_tid"] ||= (Thread.current.object_id ^ ::Process.pid).to_s(36)
end