登录 Sidekiq 工作器

20

我正在尝试记录我的Sidekiq工作者的进度。在开发环境中,使用tail -f log/development.log命令,在生产环境中使用heroku logs命令。

然而,工作者内部和被工作者调用的所有内容都没有被记录。在下面的代码中,只有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.infoSidekiq.logger.info无法记录日志信息。通过将Rails.logger.info替换为puts,使其工作。

4个回答

15

在您的工作进程中可以使用 Sidekiq.logger 或简单的 logger 引用。 默认情况下应该将输出定向到 STDOUT,并且您只需要在生产环境中将输出指向您选择的日志文件路径即可。


1
谢谢。logger.info "Some log"会记录在我启动bundle exec sidekiq的终端窗口中,但不会出现在development.log中。我尝试了bundle exec sidekiq 2>&1 | logger -t sidekiq,但是日志似乎没有任何地方出现。 - migu
6
同样的问题。这不应该被标记为解决方案。 - johnnygoodman

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类,默认的日志级别为INFO,其设置与Rails无关。

您可以在config/initializers/sidekiq.rb中设置Sidekiq使用的Logger的日志级别:

Sidekiq.configure_server do |config|
  config.logger.level = Rails.logger.level
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接