Dan*_*ell 3 logging ruby-on-rails resque ruby-on-rails-4 resque-scheduler
我在 Puma 服务器上有一个 Rails 4 应用程序,其中 Resque/Resque-Scheduler 正在运行后台作业。我想知道的是如何将两个 Resque 工作人员的日志输出合并到我的服务器日志中,或者,这是不可能的,我如何查看我的 Resque 工作人员的日志输出。目前我无法弄清楚如何查看工作人员的日志输出,所以我不知道幕后发生了什么。我找到了这篇博文,它建议将以下内容添加到我的resque.rake文件中:
task "resque:setup" => :environment do
  Resque.before_fork = Proc.new { 
    ActiveRecord::Base.establish_connection
    # Open the new separate log file
    logfile = File.open(File.join(Rails.root, 'log', 'resque.log'), 'a')
    # Activate file synchronization
    logfile.sync = true
    # Create a new buffered logger
    Resque.logger = ActiveSupport::BufferedLogger.new(logfile)
    Resque.logger.level = Logger::INFO
    Resque.logger.info "Resque Logger Initialized!"
  }
end
那行不通。我还尝试了评论中的建议,即替换为Resque.logger = ActiveSupport::BufferedLogger.new(logfile),Resque.logger = ActiveSupport::Logger.new(logfile)但这也不起作用。使用第二个选项,当我NoMethodError: undefined method 'logger=' for Resque:Module尝试启动工作程序时仍然收到错误。
这是我当前的resque.rake文件:
require 'resque/tasks'
require 'resque_scheduler/tasks'
namespace :resque do
    puts "Loading Rails environment for Resque"
    task :setup => :environment do
        require 'resque'
        require 'resque_scheduler'
        require 'resque/scheduler'
        require 'postman'
    end
end
我已经查看了关于日志记录的 Resque 文档,但不确定如何使用其中的内容,因为我承认对 Rails 中的日志记录不太了解。我没有运气找到有关该主题的其他有用资源。
我如何修复它,它并不完美,但只是有效。
我的环境:rails 5.0.1,resque:1.26.0
第一次,我按照大多数文档的建议设置了Resque.logger和:Resque.logger.levelconfig/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 的问题更新:
# 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。
你可以尝试一下。
| 归档时间: | 
 | 
| 查看次数: | 7206 次 | 
| 最近记录: |