为delayed_job命名队列分开日志

时间:2013-10-15 10:01:57

标签: ruby-on-rails ruby 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

3 个答案:

答案 0 :(得分:3)

不幸的是,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

答案 1 :(得分: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"

答案 2 :(得分:0)

在最新的Rails版本中使用(基于Paul Nosoff的回答):

app-home ion-content {
  --background: pink;
}