在Rails中,
当我们使用Logger类时,我们总是用块来定义而不是String -
Rails.logger.error { error.message }
不是以下方式 -
Rails.logger.error "error.message"
背后的原因是什么?
答案 0 :(得分:11)
请查看此处的文档:
另一个潜在的缺陷是,如果您有多次调用Logger 在你的代码中像这样:
logger.debug "Person attributes hash: #{@person.attributes.inspect}"
在上面的示例中,即使是,也会对性能产生影响 允许的输出级别不包括调试。原因是Ruby 必须评估这些字符串,包括实例化 有点重的String对象并插入变量,和 这需要时间。因此,建议将块传递给 记录器方法,因为仅在输出级别为时才评估这些方法 相同或包含在允许的级别(即延迟加载)。
因此,您可以使用任一方法 - 传入string
或传入block
。该块是一种优化,它将推迟插入字符串(以及示例中的任何属性信息),直到Rails知道它将根据您的日志详细程度设置实际记录信息。