Set logging levels in Ruby on Rails
I'm using following code to configure logging in my Ruby on Rails application:
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
I'm trying to set the logging level to warn now using
config.log_level = :warn
in my production.rb, but it doens't seem to work. Am I missing something here?
If I put Rails.logger.level = 4 in my environment.rb, it does seem to work. But I would like to configure things in my environment initializers.
Solution 1:
According to the official documentation, you should be using:
config.log_level = :warn # In any environment initializer, or
Rails.logger.level = 0 # at any time
If neither of those work for you, try:
config.log_level = Logger::WARN
And if that doesn't work, try:
config.logger.level = Logger::WARN
Note: The final method appears to be conflating the two official strategies, but works in some situations
Solution 2:
For Rails 4.0 you can set the value in production.rb
(or your desired environment) like so:
# Set to :debug to see everything in the log.
config.log_level = :warn
Update The docs state it like so:
2.2 Log Levels
When something is logged it's printed into the corresponding log if the log level of the message is equal or higher than the configured log level. If you want to know the current log level you can call the
Rails.logger.level
method.The available log levels are:
:debug
,:info
,:warn
,:error
,:fatal
, and:unknown
, corresponding to the log level numbers from 0 up to 5 respectively. To change the default log level, useconfig.log_level = :warn # In any environment initializer, or Rails.logger.level = 0 # at any time
This is useful when you want to log under development or staging, but you don't want to flood your production log with unnecessary information.
The default Rails log level is
info
in production mode and debug in development and test mode.