登录Rails,是否有任何性能影响



Rails与Ruby的logger类捆绑在标准库中。日志级别有::debug:info:warn:error:fatal

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

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

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

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

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

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

因此,建议将块传递给记录器方法,因为只有在输出级别相同或包含在允许的级别(即延迟加载)时才会评估这些块。相同的代码重写为:
logger.debug { "my string to debug with a #{variable}" }

块的内容,因此字符串插值,只有在启用调试时才会计算。这种性能节省只有在大量日志记录的情况下才会真正引人注目,但这是一个很好的实践。

您可以在Logger文档中了解更多。

相关内容

最新更新