We're using delayed_job's named queues in our project. Is there any way to log each queue into separate log file?
DelayedJob in started in deploy script like this:
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"
What I'd like to achieve is that everything running in fast
queue would log into log/delayed_job.fast.production.log
, and everything in the other queue would log into log/delayaed_job.production.log
.
Unfortunately, the answer by jvperrin didn't help. What we've managed to do is to set the needed log file in initializer:
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