在Ruby on Rails中设置日志级别

55
我正在使用以下代码来配置我的Ruby on Rails应用程序中的日志记录:
environment.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

我现在正在尝试将日志级别设置为警告(warn)。
config.log_level = :warn

在我的production.rb文件中加入Rails.logger.level = 4,但好像不起作用。我错过了什么吗?
如果我在environment.rb中加入Rails.logger.level = 4,它似乎可以工作。但我想在我的环境初始化程序中配置这些内容。
2个回答

112
根据官方文档,你应该使用:

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

注意: 最终的方法似乎混淆了两种官方策略,但在某些情况下可以起作用


40

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

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

更新 文档中这样说明:

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。


14
请注意:"Rails 5中默认值将在所有环境中统一为:debug"。因此,任何其他值都需要在production.rb中设置,就像回答者所述。 - Rich
config.log_level = :warn 对于Rails 3.2同样适用。 - Joshua Pinter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接