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文档中了解更多。