登录 Sidekiq 工作人员

问题描述 投票:0回答:4

我正在尝试在开发中使用

tail -f log/development.log
并在生产中使用
heroku logs
来记录我的 sideqik 工作人员的进度。

但是,工作人员内部的所有内容以及工作人员调用的所有内容都不会被记录。在下面的代码中,仅记录 TEST 1。

如何记录工作人员内部的所有内容以及工作人员调用的类?

# app/controllers/TasksController.rb
def import_data
  Rails.logger.info "TEST 1" # shows up in development.log
  DataImportWorker.perform_async
  render "done"           
end

# app/workers/DataImportWorker.rb
class DataImportWorker
  include Sidekiq::Worker

  def perform    
    Rails.logger.info "TEST 2" # does not show up in development.log

    importer = Importer.new
    importer.import_data
  end
end


# app/controllers/services/Importer.rb    
class Importer  
  def import_data
    Rails.logger.info "TEST 3" # does not show up in development.log
  end
end

更新

我仍然不明白为什么

Rails.logger.info
Sidekiq.logger.info
不登录到日志流。将
Rails.logger.info
替换为
puts
即可正常工作。

ruby-on-rails ruby sidekiq
4个回答
15
投票

有一个

Sidekiq.logger
和简单的
logger
参考,您可以在您的工作人员中使用。默认值应该是 STDOUT,您应该将生产中的输出定向到您选择的日志文件路径。


3
投票

它可以在 Rails 6 中运行:

# config/initializers/sidekiq.rb

Rails.logger = Sidekiq.logger
ActiveRecord::Base.logger = Sidekiq.logger

2
投票

@migu,您在

config/initializer.rb
中尝试过以下命令吗?

Rails.logger = Sidekiq::Logging.logger

1
投票

我找到了这个解决方案,它似乎运作良好。

Sidekiq 使用 Ruby Logger 类,默认 Log Level 为

INFO
,其设置独立于 Rails。

您可以在

Logger
中为Sidekiq使用的
config/initializers/sidekiq.rb
设置Sidekiq日志级别:

Sidekiq.configure_server do |config|
  config.logger.level = Rails.logger.level
end
© www.soinside.com 2019 - 2024. All rights reserved.