你应该使用 Ruby on Rails 的日志记录块语法

主要观点:在 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直接设置日志级别。
  • 示例中展示了不同日志级别下的对象分配情况,以及使用块语法前后的对比。
阅读 13
0 条评论