如何创建与ActiveRecord对象保持一致的日志文件?

时间:2015-05-06 16:13:36

标签: ruby-on-rails ruby-on-rails-4 logging carrierwave

我有一个Upload AR模型,可以由许多后台作业之一处理,具体取决于上传的file_type。要跟踪每个Upload发生的情况,它会在其上定义一个名为log CarrierWave 字段。

我想记录上传文件的处理,并将其与upload对象一起保存在数据库中。这些是大型CSV文件,当其中一个记录出现问题时,我没有使整个文件失败。

我不知道如何从正在进行处理的后台工作中写入此log。如果我这样做:

  def logger
    logfile = File.open(self.log_file_name, 'w')  #create log file
    logfile.sync = true  #automatically flushes data to file
    Logger.new(logfile, 10, 500000)
  end

在模型上,然后它每次都要实例化该日志文件。如果我这样做:

  def logger
    @@logger ||= {}
    @@logger[id] ||= Logger.new(File.open(self.log_file_name, 'w'), 10, 500000)  #create log file
  end

那是非常丑陋的,如果我这样做,我就不知道如何设置logfile.sync = true

然后我必须有一个丑陋的方法来关闭文件并在保存之前将@@logger分配给upload.log字段。

我只是看了太久而且看不到丑陋,我确信有一种更清洁的方式。

1 个答案:

答案 0 :(得分:0)

您可以使用其中一个宝石来简化您的任务 https://github.com/shadabahmed/logstasher https://github.com/roidrage/lograge