[英]delayed_job not logging
我无法记录我的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运行delay_job。 我正在将delay_job 3.0.1与ruby 1.9.3和rails 3.0.10一起使用。
一个推断可能是作业在生产者端仅初始化一次。 然后将其序列化,通过队列(例如数据库)传递,并在工作线程中取消序列化。 但是不会在工作进程中再次调用initialize方法。 通过send仅调用perform方法。
但是,您可以重用worker记录器以写入日志文件:
class MyJob
def perform
say "performing like hell"
end
def say(text)
Delayed::Worker.logger.add(Logger::INFO, text)
end
end
不要忘记重新启动工作程序。
在RAILS_ROOT / config / initializers中,有一个名为delay_job_config.rb的文件,其内容如下:
Delayed::Worker.logger = Rails.logger
Delayed::Worker.logger.auto_flushing = true
执行此操作后,请记住要重新启动您的工作人员。
让我知道这是否有帮助
我不明白为什么要在工作中设置记录器。 完成此操作后,我将工作程序设置为在启动时使用特定文件,例如Logger.new("log/worker_#{worker_number}")
,以确保每个工作程序输出到其自己的文件,而您不必担心多个工作人员同时写入同一文件(混乱)。
另外,在普通红宝石中,您可以将@logger.info "logging from delayed_job"
。
最后,我很确定'perform'是由您的工作人员直接调用并实例化的,因此您可以重构为:
class MyJob
def perform(blahblah)
@logger.add Logger::INFO, "logging from delayed_job"
@blahblah = blahblah
#do stuff
end
end
在Rails 3.2中,这对我来说工作得很好:
class FiveMinuteAggregateJob < Struct.new(:link, :timestamp)
def perform
Rails.logger.info 'yup.'
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.