Rails 5 Sending STDOUT via environment variable

Mohit Natoo

By Mohit Natoo

on April 12, 2016

This blog is part of our  Rails 5 series.

By default, Rails creates log directory in a file that is named after the environment in which the application is running. So in production environment, logs are by default directed to production.log file.

We will have to define custom loggers if these logs are to be directed to another file or to standard output. Presence of such custom logic is what enables Rails to direct logs to STDOUT along with development.log file in development environment.

Rails 5, however, supports logging to STDOUT in production environment through introduction of new environment variable RAILS_LOG_TO_STDOUT.

In a brand new Rails app, we can see the following snippet in production.rb file.

1if ENV["RAILS_LOG_TO_STDOUT"].present?
2  config.logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))

By setting RAILS_LOG_TO_STDOUT to any value we should have the production logs directed to STDOUT.

We can see in the snippet above config.logger is overwritten. Therefore now the logs will not be directed to production.log file.

To opt out of this and revert to the original functionality, we can either assign a blank value to this environment constant or remove RAILS_LOG_TO_STDOUT from the list of environment constants.

Stay up to date with our blogs. Sign up for our newsletter.

We write about Ruby on Rails, ReactJS, React Native, remote work,open source, engineering & design.