【发布时间】:2015-05-06 16:13:35
【问题描述】:
我有一个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字段。
我只是看了太久,无法消除丑陋,我相信有一种更清洁的方法。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 logging carrierwave