【问题标题】:delayed_job not loggingdelay_job 没有记录
【发布时间】:2023-03-19 00:01:02
【问题描述】:

我无法从 delay_job 进程中记录消息。这是正在运行的作业。

class MyJob
  def initialize(blahblah)
    @blahblah = blahblah
    @logger = Logger.new(File.join(Rails.root, 'log', 'delayed_job.log'))
  end
  def perform
    @logger.add Logger::INFO, "logging from delayed_job"
    #do stuff
  end
end

我尝试了各种日志记录级别,并且我的环境配置中有 config.log_level = :debug。我从monit 运行delayed_job。我正在使用带 ruby​​ 1.9.3 和 rails 3.0.10 的延迟作业 3.0.1。

【问题讨论】:

  • 一个想法是它是冲突的,因为delayed_job 也在使用这个日志文件。你试过别的名字吗?
  • 我尝试了一个不同的名字。新的日志文件已创建,但没有记录任何内容。

标签: ruby-on-rails ruby ruby-on-rails-3 delayed-job background-process


【解决方案1】:

一种解释可能是作业只在生产者端初始化一次。然后它被序列化,通过队列(例如数据库)传递并在工作线程中取消序列化。但是在工作进程中不再调用初始化方法。通过 send 仅调用 perform 方法。

但是,您可以重用工作人员记录器来写入日志文件:

class MyJob
  def perform
    say "performing like hell"
  end

  def say(text)
    Delayed::Worker.logger.add(Logger::INFO, text)
  end
end

别忘了重启工人。

【讨论】:

  • 我得到这个“TestJob 失败并出现 NoMethodError:未定义的方法 `add' for nil:NilClass”。 Raghus 的回答解决了这个问题。
【解决方案2】:

在 RAILS_ROOT/config/initializers 中有一个名为 delayed_job_config.rb 的文件,其中包含以下几行:

Delayed::Worker.logger = Rails.logger
Delayed::Worker.logger.auto_flushing = true

请记住在执行此操作后重新启动您的工作人员。

如果这有帮助,请告诉我

【讨论】:

  • auto_flushing 在 rails 3 中已弃用,似乎已在更高版本中删除
  • 有关删除 auto_flushing 的潜在补救措施,请参阅 Rails-3.2 deprecation notices
【解决方案3】:

我不明白你为什么要在工作中设置记录器。完成此操作后,我将工作人员设置为在启动时使用特定文件,例如Logger.new("log/worker_#{worker_number}") 确保每个工作人员输出到自己的文件,您不必担心多个工作人员同时写入同一个文件(混乱)。

另外,在普通的 ol' ruby​​ 中,您可以致电 @logger.info "logging from delayed_job"

最后,我很确定“执行”是由您的工作人员直接调用并实例化的,因此您可以重构为:

class MyJob
 def perform(blahblah)
  @logger.add Logger::INFO, "logging from delayed_job"
  @blahblah = blahblah
  #do stuff
 end
end

【讨论】:

  • 我实际上无法以这种方式重构,我认为 perform 不需要任何参数。自从上一个答案有效以来,我没有尝试过您的日志记录方法,但我相信我记得之前尝试过,但没有成功。
  • 你是对的,我应该在初始化程序或其他东西中设置记录器,而不是在作业中设置它。
【解决方案4】:

这在 Rails 3.2 中对我来说很好用:

class FiveMinuteAggregateJob < Struct.new(:link, :timestamp)
  def perform
    Rails.logger.info 'yup.'
  end
end

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 2013-01-15
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多