Ruby on Rails записывает логи подкласса ActiveJob в нужный файл - PullRequest
0 голосов
/ 11 июля 2019

Рубин: 2.3.2

Рельсы: 5.0.0.1

У меня есть следующие классы

class JobA < ApplicationJob
  def perform(args)
    Rails.logger.debug "JobA log"

    if condition_1
      JobB.perform_later(args)
    else
      JobC.perform_later(args)
    end
  end
end

class JobB < ApplicationJob
  def perform(args)
    Rails.logger.debug "JobB log"
  end
end

class JobC < ApplicationJob
  def perform(args)
    Rails.logger.debug "JobC log"
  end
end

class RecurringJob
  def perform
    JobA.perform_later(args)
  end
end

Я хочу перенаправить журналы, написанные каждым из классов JobA, JobB, JobC, в нужный файл.Однако это не работает.

Я попытался выполнить следующие действия:

/ config / initializers / logging.rb

# Reference: https://stackoverflow.com/a/44168717/936494
class SelectedJobsLogger
  LOG_FILE_PATH = Rails.root.join('log', 'selected_jobs.log')
  class << self
    cattr_accessor :logger
    delegate :debug, :info, :warn, :error, :fatal, :to => :logger
  end
end

module SelectedJobsLogHelpers
  LOGGER_CLAZZ = SelectedJobsLogger

  private

  def log_debug_message(msg)
    LOGGER_CLAZZ.debug(msg)
  end
end

SelectedJobsLogger.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(logger_clazz::LOG_FILE_PATH))
SelectedJobsLogger.logger.level = Rails.logger.level

И затем обновил свои рабочие классыследующим образом

class JobA < ApplicationJob
  include SelectedJobsLogHelpers

  def perform(args)
    log_debug_message "JobA log"

    if condition_1
      JobB.perform_later(args)
    else
      JobC.perform_later(args)
    end
  end
end

class JobB < ApplicationJob
  include SelectedJobsLogHelpers

  def perform(args)
    log_debug_message "JobB log"
  end
end

class JobC < ApplicationJob
  include SelectedJobsLogHelpers

  def perform(args)
    log_debug_message "JobC log"
  end
end

При этом только "JobA log" записывается в log/selected_jobs.log, а JobB log и JobC log записываются в log/development.log

log / selected_jobs.log

# Logfile created on 2019-07-11 20:55:47 +0530 by logger.rb/56438
JobA log

log / development.log

[ActiveJob] Enqueued JobA (Job ID: cbdc5989-40a5-4dd9-8ade-b14ea85c0214) to Sidekiq(queue_1) with arguments: 63
[ActiveJob] [JobA] [cbdc5989-40a5-4dd9-8ade-b14ea85c0214] Performing JobA from Sidekiq(my_queue) with arguments: 63
[ActiveJob] [JobA] [cbdc5989-40a5-4dd9-8ade-b14ea85c0214] Enqueued JobB (Job ID: a1de8536-1cda-47b7-ba7e-7e3e913c58b3) to Sidekiq(queue_2) with arguments: 162
[ActiveJob] [JobA] [cbdc5989-40a5-4dd9-8ade-b14ea85c0214] Performed JobA from Sidekiq(my_queue) in 160.3ms
[ActiveJob] [JobB] [a1de8536-1cda-47b7-ba7e-7e3e913c58b3] Performing JobB from Sidekiq(queue_2) with arguments: 162
[ActiveJob] [JobB] [a1de8536-1cda-47b7-ba7e-7e3e913c58b3] JobB log
[ActiveJob] [JobB] [a1de8536-1cda-47b7-ba7e-7e3e913c58b3] Performed JobB from Sidekiq(queue_2) in 349.68ms

[ActiveJob] Enqueued JobA (Job ID: 90b1863e-4967-41d6-8ad9-a9a329df46e9) to Sidekiq(queue_1) with arguments: 63
[ActiveJob] [JobA] [90b1863e-4967-41d6-8ad9-a9a329df46e9] Performing JobA from Sidekiq(queue_1) with arguments: 63
....
...

[ActiveJob] [JobA] [90b1863e-4967-41d6-8ad9-a9a329df46e9] Performed JobA from Sidekiq(queue_1) in 13.21ms

Также, как видно из log / selected_jobs.log журналы заданий записываются не в том формате, в котором они записаны в формате log / development.log .Мне нужно, чтобы журналы в первом файле были записаны в том же формате, что и во втором.

Может кто-нибудь помочь мне в достижении желаемой цели?

...