15

loggerRails 与标准库中的Ruby 类捆绑在一起。可用的日志级别有::debug:info:warn:error:fatal

我想知道如果我在我的 Rails 应用程序中添加大量日志记录,并将日志级别设置为:debug用于开发和测试,在生产中运行并关闭日志记录或设置为更高级别(例如)时会不会对性能产生影响config.log_level = :fatal

4

1 回答 1

32

简短的回答是,日志记录总是会对性能产生影响,尤其是在记录到磁盘时。但是,有一些微妙之处。

首先,使用:debug级别将比 具有更大的性能损失:fatal,因为正在评估更多数量的字符串并将其写入日志输出(例如磁盘)。

另一个潜在的陷阱是,如果你的代码中有很多这样的调用:

logger.debug = "my string to debug with a #{variable}"

即使允许的输出级别不包括调试,也会对性能产生影响。原因是 Ruby 必须评估这些字符串,其中包括实例化有点重的String对象和插入变量,这需要时间。

因此,建议将块传递给记录器方法,因为只有在输出级别相同或包含在允许的级别(即延迟加载)时才会评估这些块。重写的相同代码将是:

logger.debug { "my string to debug with a #{variable}" }

仅在启用调试时才评估块的内容以及因此的字符串插值。这种性能节省只有在大量日志记录时才真正显着,但这是一个很好的实践。

您可以在Logger 文档中阅读更多相关信息。

于 2013-05-14T15:16:21.567 回答