2013-10-15 72 views
3

我們在項目中使用delayed_job的命名隊列。有沒有辦法將每個隊列記錄到單獨的日誌文件中?delayed_job命名隊列的單獨日誌

DelayedJob在開始部署腳本是這樣的:

run "cd #{current_path};RAILS_ENV=#{rails_env} script/delayed_job -p #{rails_env} -i 1 --queue=fast start" 
run "cd #{current_path};RAILS_ENV=#{rails_env} script/delayed_job -p #{rails_env} -i 2 start" 

我想實現的是,一切都在fast隊列運行會登錄到log/delayed_job.fast.production.log,一切都在其他的隊列將登錄到log/delayaed_job.production.log

回答

2

不幸的是,jvperrin回答沒有幫助。我們設法在初始化器中設置所需的日誌文件:

Delayed::Worker.logger = ActiveSupport::BufferedLogger.new("log/delayed_job.#{Rails.env}.log", Rails.logger.level) 

if caller.last =~ /script\/delayed_job/ 
    queues = ARGV.select { |opt| opt =~ /--queue=/ } 
    queue = /\=(.*)/.match(queues.first) if queues 
    queue = $1 if queue 

    if queue 
    Delayed::Worker.logger = ActiveSupport::BufferedLogger.new("log/delayed_job.#{queue}.#{Rails.env}.log", Rails.logger.level) 
    end 

    ActiveRecord::Base.logger = Delayed::Worker.logger 
    Rails.logger = Delayed::Worker.logger 
end 
+0

好吧,謝謝你的賞金。對不起,我的解決方案沒有幫助,但很好的工作反正它! – jvperrin

1

嘗試添加包含下列兩個命令來替換你的部署腳本的兩個命令:

run "cd #{current_path};RAILS_ENV=#{rails_env} script/delayed_job -p #{rails_env} -i 1 --queue=fast start >> ./log/delayed_job.fast.production.log 2>&1" 
run "cd #{current_path};RAILS_ENV=#{rails_env} script/delayed_job -p #{rails_env} -i 2 start >> ./log/delayed_job.production.log 2>&1" 

我加>> ./log/delayed_job.fast.production.log 2>&1到的第一個命令的結束和>> ./log/delayed_job.production.log 2>&1到第二個命令的結束。這些添加的部分將採用delayed_job命令的輸出並將stdout和stderr重定向到每個日誌文件。輸出可能不會立即寫入文件,可能是因爲文件寫入存在某種緩衝區。

如果您所要的輸出也不斷地出現在屏幕上,以及被記錄到文件,然後你可以使用tee命令:

run "cd #{current_path};RAILS_ENV=#{rails_env} script/delayed_job -p #{rails_env} -i 1 --queue=fast start | tee -a ./log/delayed_job.fast.production.log 2>&1" 
run "cd #{current_path};RAILS_ENV=#{rails_env} script/delayed_job -p #{rails_env} -i 2 start | tee -a ./log/delayed_job.production.log 2>&1"