Delayed Job在生产环境中无法记录日志

7
我希望我的延迟任务“code”能够根据业务需求记录到不同的日志文件中。因此,我在名为dj.log的日志中记录自定义状态。在“序列化”任务中,我放置了日志语句以记录到我的文件中。
以下是设置方式:
Delayed::Worker.destroy_failed_jobs = false
Delayed::Worker.sleep_delay = 60
Delayed::Worker.max_attempts = 10
Delayed::Worker.delay_jobs = !( Rails.env.test? || Rails.env.development? ) #dont use delayed_job in development or test mode

#Delayed_job custom logger
DJ_LOGFILE = File.join(Rails.root, 'log', 'dj.log')

这里是工人们实际从事的工作内容。

    people.each {|p| Mailer.mail(1233, p).deliver; sent_to << p.email }                
    Logger.new(DJ_LOGFILE).info("[DELIVERED] All Emails delivered (#{sent_to.join(", ")})")

这里可能存在什么问题?请帮忙。

邮件已经被发送,但是消息没有被记录。 - Anand
3个回答

13

DelayedJob 维护它自己的日志记录器,因此您需要将其指向特定的日志文件。 因此,在您的初始化文件中(无论是environment.rb还是更好的specific delayed_job.rb文件位于config/initializers),请添加以下内容:

Delayed::Worker.logger = Logger.new(File.join(Rails.root, 'log', 'dj.log'))

我的代码在开发和演示环境中都能正常工作! - Anand
似乎任何文件指针都指向DelayedJob :: Worker.logger(默认为Rails.logger)。http://groups.google.com/group/delayed_job/browse_thread/thread/5c13d59aa4f5cb41 所以..上面的代码对我有用! - Anand
为了更好地记录生产环境日志,请使用 Delayed::Worker.logger ||= Logger.new(File.join(Rails.root, 'log', 'delayed_job_production.log'), 10, 100*1024*1024) 自动轮转日志文件,每个文件保留最新的10个条目,每个文件大小为100MB。 - Alex Le

2

这是我的解决方案(已经在2.1.4进行测试):

config/initializers/delayed_job.rb

Delayed::Worker.logger ||= Logger.new(File.join(Rails.root, 'log', 'delayed_job.log'))

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接