bad*_*aam 22 ruby-on-rails delayed-job
#Here is how I have delayed job set up.
Delayed::Worker.backend = :active_record
#Delayed::Worker.logger = Rails.logger
Delayed::Worker.logger = ActiveSupport::BufferedLogger.new("log/
##{Rails.env}_delayed_jobs.log", Rails.logger.level)
Delayed::Worker.logger.auto_flushing = 1
class Delayed::Job
def logger
Delayed::Worker.logger
end
end
if JobsCommon::check_job_exists("PeriodicJob").blank?
Delayed::Job.enqueue PeriodicJob.new(), 0, 30.seconds.from_now
end
#end
#Here is my simple job.
class PeriodicJob
def perform
Rails.logger.info "Periodic job writing #{Time.now}"
Delayed::Job.enqueue PeriodicJob.new(), 0,
30.seconds.from_now
end
end
Run Code Online (Sandbox Code Playgroud)
我没有在rails日志或延迟的作业日志文件中看到来自延迟作业的任何日志消息,我看到的唯一消息是delayed_jobs.log文件中的作业开始/成功/失败.
这导致了大问题,包括检测工作中的错误和内存泄漏几乎是不可能的!请帮忙!
我们已经通过攻击Rails.logger本身来使用不同的日志文件(我们想要的delayed_job条目)以及设置延迟的作业记录器以使用完全相同的对象来使用Rails 3/Delayed Job 2.0.3 :
file_handle = File.open("log/#{Rails.env}_delayed_jobs.log", (File::WRONLY | File::APPEND | File::CREAT))
# Be paranoid about syncing, part #1
file_handle.sync = true
# Be paranoid about syncing, part #2
Rails.logger.auto_flushing = true
# Hack the existing Rails.logger object to use our new file handle
Rails.logger.instance_variable_set :@log, file_handle
# Calls to Rails.logger go to the same object as Delayed::Worker.logger
Delayed::Worker.logger = Rails.logger
Run Code Online (Sandbox Code Playgroud)
如果上述代码不起作用,请尝试替换Rails.logger为RAILS_DEFAULT_LOGGER.
这可能是一个简单的解决方法,但它对我来说足够好:
system("echo #{your message here} >> logfile.log")
Run Code Online (Sandbox Code Playgroud)
简单但有效
| 归档时间: |
|
| 查看次数: |
19835 次 |
| 最近记录: |