---
title: "Ruby 2.4 has added additional parameters for Logger#new"
description:
  "Ruby 2.4 makes it possible to specify logger level, progname, formatter and
  datetime_format in logger constructor."
canonical_url: "https://www.bigbinary.com/blog/ruby-2-4-has-added-additional-parameters-for-logger-new"
markdown_url: "https://www.bigbinary.com/blog/ruby-2-4-has-added-additional-parameters-for-logger-new.md"
---

# Ruby 2.4 has added additional parameters for Logger#new

Ruby 2.4 makes it possible to specify logger level, progname, formatter and
datetime_format in logger constructor.

- Author: Chirag Shah
- Published: April 10, 2017
- Categories: Ruby 2.4, Ruby

The
[Logger](http://ruby-doc.org/stdlib-2.4.0/libdoc/logger/rdoc/Logger.html#method-c-new)
class in Ruby provides a simple but sophisticated logging utility.

After creating the logger object we need to set its level.

### Ruby 2.3

```ruby

require 'logger'
logger = Logger.new(STDOUT)
logger.level = Logger::INFO

```

If we are working with `ActiveRecord::Base.logger`, then same code would look
something like this.

```ruby

require 'logger'
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Base.logger.level = Logger::INFO

```

As we can see in the both the cases we need to set the level separately after
instantiating the object.

### Ruby 2.4

In Ruby 2.4, `level` can now be specified in the constructor.

```ruby

#ruby 2.4
require 'logger'
logger = Logger.new(STDOUT, level: Logger::INFO)

# let's verify it
logger.level      #=> 1

```

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.

```ruby
#ruby 2.3
require 'logger'
logger = Logger.new(STDOUT)
logger.level = Logger::INFO
logger.progname = 'bigbinary'
logger.datetime_format = '%Y-%m-%d %H:%M:%S'
logger.formatter = proc do |severity, datetime, progname, msg|
  "#{severity} #{datetime} ==> App: #{progname}, Message: #{msg}\n"
end

logger.info("Program started...")
#=> INFO 2017-03-16 18:43:58 +0530 ==> App: bigbinary, Message: Program started...
```

Here is same stuff in Ruby 2.4.

```ruby
#ruby 2.4
require 'logger'
logger = Logger.new(STDOUT,
  level: Logger::INFO,
  progname: 'bigbinary',
  datetime_format: '%Y-%m-%d %H:%M:%S',
  formatter: proc do |severity, datetime, progname, msg|
    "#{severity} #{datetime} ==> App: #{progname}, Message: #{msg}\n"
  end
)

logger.info("Program started...")
#=> INFO 2017-03-16 18:47:39 +0530 ==> App: bigbinary, Message: Program started...

```

## Links

- [Human page](https://www.bigbinary.com/blog/ruby-2-4-has-added-additional-parameters-for-logger-new)
