We write about Ruby on Rails, React.js, React Native, remote work, open source, engineering and design.
The Logger class in Ruby provides a simple but sophisticated logging utility.
After creating the logger object we need to set its level.
1
2require 'logger'
3logger = Logger.new(STDOUT)
4logger.level = Logger::INFO
5
If we are working with
ActiveRecord::Base.logger
,
then same code would look something like this.
1
2require 'logger'
3ActiveRecord::Base.logger = Logger.new(STDOUT)
4ActiveRecord::Base.logger.level = Logger::INFO
5
As we can see in the both the cases we need to set the level separately after instantiating the object.
In Ruby 2.4,
level
can now be specified
in the constructor.
1
2#ruby 2.4
3require 'logger'
4logger = Logger.new(STDOUT, level: Logger::INFO)
5
6# let's verify it
7logger.level #=> 1
8
Similarly,
other options such as
progname
, formatter
and datetime_format
,
which prior to Ruby 2.4
had to be explicitly set,
can now be set
during the instantiation.
1#ruby 2.3
2require 'logger'
3logger = Logger.new(STDOUT)
4logger.level = Logger::INFO
5logger.progname = 'bigbinary'
6logger.datetime_format = '%Y-%m-%d %H:%M:%S'
7logger.formatter = proc do |severity, datetime, progname, msg|
8 "#{severity} #{datetime} ==> App: #{progname}, Message: #{msg}\n"
9end
10
11logger.info("Program started...")
12#=> INFO 2017-03-16 18:43:58 +0530 ==> App: bigbinary, Message: Program started...
Here is same stuff in Ruby 2.4.
1#ruby 2.4
2require 'logger'
3logger = Logger.new(STDOUT,
4 level: Logger::INFO,
5 progname: 'bigbinary',
6 datetime_format: '%Y-%m-%d %H:%M:%S',
7 formatter: proc do |severity, datetime, progname, msg|
8 "#{severity} #{datetime} ==> App: #{progname}, Message: #{msg}\n"
9 end
10)
11
12logger.info("Program started...")
13#=> INFO 2017-03-16 18:47:39 +0530 ==> App: bigbinary, Message: Program started...
14