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