[英]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.