我如何修复它,它并不完美,但只是有效。
我的环境:rails 5.0.1,resque:1.26.0
第一次,我设置了Resque.logger
and Resque.logger.level
in config/initializers/resque.rb
正如大多数文档所建议的:
# config/initializers/resque.rb
Resque.logger = Logger.new("#{Rails.root}/log/resque.log")
Resque.logger.level = Logger::DEBUG
然后在工作中,我输出日志Resque.logger.info
:
# update_xxx_job.rb
class UpdateXxxJob
def self.perform
Resque.logger.info 'Job starts'
...
end
end
它不起作用,我什么也看不到log/resque.log
.
然后有人说应该始终设置日志文件同步,没有缓冲区,所以我更新了config/initializers/resque.rb
根据来自 stackoverflow 的一个问题 https://stackoverflow.com/questions/30776842/where-should-i-define-my-resque-logger-in-my-rails-application:
# config/initializers/resque.rb
logfile = File.open(File.join(Rails.root, 'log', 'resque.log'), 'a')
logfile.sync = true
Resque.logger = ActiveSupport::Logger.new(logfile)
Resque.logger.level = Logger::INFO
还是不行。
我还尝试了配置 resque 记录器lib/tasks/resque.rake
:
# lib/tasks/resque.rake
require 'resque'
require 'resque/tasks'
require 'resque/scheduler/tasks'
require 'resque-scheduler'
require 'resque/scheduler/server'
namespace :resque do
task setup: :environment do
Resque.schedule = YAML.load_file(Rails.root + "config/resque_scheduler_#{Rails.env}.yml")
Resque.redis.namespace = "xxx_#{Rails.env}"
Resque.logger = Logger.new("#{Rails.root}/log/resque.log")
Resque.logger.level = Logger::INFO
end
end
不起作用。
最后,我决定将记录器配置从初始化程序移至作业,因此作业现在如下所示:
# update_xxx_job.rb
class UpdateXxxJob
def self.perform
Resque.logger = Logger.new("#{Rails.root}/log/resque.log")
Resque.logger.level = Logger::DEBUG
Resque.logger.info 'Job starts'
...
end
end
然后我就可以得到我想要的log/resque.log
.
你可以尝试一下。