我有一个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
字段。
我只是看了太久而且看不到丑陋,我确信有一种更清洁的方式。
答案 0 :(得分:0)
您可以使用其中一个宝石来简化您的任务 https://github.com/shadabahmed/logstasher https://github.com/roidrage/lograge