如何设置 PaperTrail 记录器?

How do I set the PaperTrail logger?

我 运行 在从模型的 table.

中删除一列后尝试具体化 PaperTrail 版本时遇到了问题

堆栈跟踪开始:private method 'warn' called for nil:NilClass

并指出 reify 方法中的以下几行:

# Set all the attributes in this version on the model.
attrs.each do |k, v|
  if model.has_attribute?(k)
    model[k.to_sym] = v
  elsif model.respond_to?("#{k}=")
    model.send("#{k}=", v)
  else
    logger.warn "Attribute #{k} does not exist on #{item_type} (Version id: #{id})."
  end
end

因为我已经从 table 中删除了该列,所以我登陆了逻辑树的 else 块,这看起来非常合理......我很好地记录了这一点继续前进与具体化。

但是,我不明白为什么 logger 首先是 nil。我在哪里以及如何设置 PaperTrail 记录器,以便我们简单地记录行为而不是使应用程序崩溃?

我想出了两种方法来实现这一点。

1) 通过覆盖 PaperTrail::Version class

module PaperTrail
  class Version < ActiveRecord::Base
    include PaperTrail::VersionConcern

    def logger
      Logger.new(STDOUT)
    end

  end
end

2) 通过在初始化程序中设置 ActiveRecord::Base 的记录器(显然这会影响所有模型,因此您可能希望将日志级别指定为高于调试的级别):

ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Base.logger.level = Logger::INFO

想知道是否还有其他推荐方法,但这些方法目前似乎对我有用。

截至 2016-12-14 答案是升级到 PT 6.0.2。

这已在 PT 6.0.2 中修复,感谢 Andy 的 PR https://github.com/airblade/paper_trail/pull/905(OP。谢谢,Andy)