在Ruby on Rails中设置日志记录级别

Lie*_*oen 37 logging ruby-on-rails ruby-on-rails-3

我正在使用以下代码来配置我的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
Run Code Online (Sandbox Code Playgroud)

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

config.log_level = :warn
Run Code Online (Sandbox Code Playgroud)

在我的production.rb中,但似乎没有用.我在这里错过了什么吗?

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

Bra*_*rth 75

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

config.log_level = :warn # In any environment initializer, or
Rails.logger.level = 0 # at any time
Run Code Online (Sandbox Code Playgroud)

如果这些都不适合您,请尝试:

config.log_level = Logger::WARN
Run Code Online (Sandbox Code Playgroud)

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

config.logger.level = Logger::WARN
Run Code Online (Sandbox Code Playgroud)

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


Bes*_*esi 26

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

# Set to :debug to see everything in the log.
config.log_level = :warn
Run Code Online (Sandbox Code Playgroud)

更新 文档说明如下:

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
Run Code Online (Sandbox Code Playgroud)

当您想要在开发或登台下登录时,这非常有用,但您不希望使用不必要的信息填充生产日志.

默认的Rails日志级别info处于生产模式,并在开发和测试模式下进行调试.

  • 只需注意"在Rails 5中,默认值将在所有环境中统一为`:debug`",因此需要在answer.rb中设置任何其他值,如回答者所述. (11认同)