logger
Rails 与标准库中的Ruby 类捆绑在一起。可用的日志级别有::debug
、:info
、:warn
、:error
和:fatal
。
我想知道如果我在我的 Rails 应用程序中添加大量日志记录,并将日志级别设置为:debug
用于开发和测试,在生产中运行并关闭日志记录或设置为更高级别(例如)时会不会对性能产生影响config.log_level = :fatal
?
logger
Rails 与标准库中的Ruby 类捆绑在一起。可用的日志级别有::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 文档中阅读更多相关信息。