主要观点:在 Ruby on Rails 中,向 Rails 日志记录器方法传递字符串会导致不必要的对象分配,使用块语法可节省对象分配和 CPU 时间;日志级别可在环境配置或 Rails 控制台中设置,高于当前配置级别日志不会被记录。
关键信息:
- 传递字符串到
Rails.logger.info(…)
等方法会导致不必要的对象分配和 CPU 工作。 - 日志级别默认在生产环境为
info
或以下,debug
级别的日志在info
级别时不会输出。 - 示例中设置日志级别为
debug
时会进行大量对象分配,而设置为info
时仍有不少对象分配。 - 原因是调用
Rails.logger.debug
时字符串会被创建为对象,包括插值和可能的方法调用。 - 解决方案是向日志记录器传递块,只有当日志级别符合时块才会被调用,从而减少对象分配。
重要细节: - 可通过
config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "info")
在环境配置中设置日志级别。 - 在 Rails 控制台可通过
Rails.logger.level = :warn
直接设置日志级别。 - 示例中展示了不同日志级别下的对象分配情况,以及使用块语法前后的对比。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。