【问题标题】:Set logging levels in Ruby on Rails在 Ruby on Rails 中设置日志记录级别
【发布时间】:2012-08-24 05:25:27
【问题描述】:

我正在使用以下代码在我的 Ruby on Rails 应用程序中配置日志记录:

环境.rb:

Rails.logger = Logger.new(STDOUT)

class Logger
  def format_message(severity, timestamp, progname, msg)
    "#{timestamp.to_formatted_s(:db)} #{severity} #{msg}\n"
  end
end

我正在尝试将日志记录级别设置为现在使用警告

config.log_level = :warn

在我的 production.rb 中,但它似乎不起作用。我在这里遗漏了什么吗?

如果我将 Rails.logger.level = 4 放在我的 environment.rb 中,它似乎确实有效。但我想在我的环境初始化器中配置一些东西。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 logging


    【解决方案1】:

    根据the official documentation,您应该使用:

    config.log_level = :warn # In any environment initializer, or
    Rails.logger.level = 0 # at any time
    

    如果这些都不适合你,试试:

    config.log_level = Logger::WARN
    

    如果这不起作用,请尝试:

    config.logger.level = Logger::WARN
    

    注意:最后的方法似乎将两种官方策略混为一谈,但在某些情况下有效

    【讨论】:

      【解决方案2】:

      对于 Rails 4.0,您可以在 production.rb(或您想要的环境)中设置值,如下所示:

      # Set to :debug to see everything in the log.
      config.log_level = :warn
      

      更新 The docs 声明如下:

      2.2 日志级别

      当记录某些内容时,如果消息的日志级别等于或高于配置的日志级别,则会将其打印到相应的日志中。如果你想知道当前的日志级别可以调用Rails.logger.level方法。

      可用的日志级别为::debug:info:warn:error:fatal:unknown,分别对应从 0 到 5 的日志级别编号。要更改默认日志级别,请使用

      config.log_level = :warn # In any environment initializer, or
      Rails.logger.level = 0 # at any time
      

      当您想要在开发或暂存中登录,但又不想让不必要的信息淹没您的生产日志时,这很有用。

      默认 Rails 日志级别在生产模式下为 info,在开发和测试模式下为 debug。

      【讨论】:

      • 请注意“在 Rails 5 中,默认值将在所有环境中统一为 :debug”,因此需要在 production.rb 中设置任何其他值,如回答者所述。
      • config.log_level = :warn 也适用于 Rails 3.2。