Permalink
Browse files

Allow to explicitly specify whether to output Rails' log to stdout

Before Rails' logger output is mirrored to std out if:

* environment is development and
* the process is not daemonized

It was not possible to change that behaviour, e.g. to disable log output
in that case or enable it in other cases.

Now you can explicitly disable or enable output with the new command
line switch `--log-to-stdout`, regardless of any other circumstances.

```
// enable output in production
rails server -e production --log-to-stdout

// disable output in development
rails server -e development --no-log-to-stdout
```

Enabling output when daemonized still makes no sense (since tty is
detached), but this is ignored for now.

If the command line flag is not specified, old behaviour still
applies, so this change is completely backward compatible.
  • Loading branch information...
doits committed Jul 8, 2018
1 parent 79edcae commit 889a7ccf086c23baccb52342a631f1be81405e6b
Showing with 21 additions and 2 deletions.
  1. +9 −2 railties/lib/rails/commands/server/server_command.rb
  2. +12 −0 railties/test/commands/server_test.rb
@@ -132,13 +132,14 @@ class ServerCommand < Base # :nodoc:
desc: "Specifies whether to perform caching in development."
class_option :restart, type: :boolean, default: nil, hide: true
class_option :early_hints, type: :boolean, default: nil, desc: "Enables HTTP/2 early hints."
class_option :log_to_stdout, type: :boolean, default: nil, optional: true,
desc: "Whether to log to stdout. Enabled by default in development when not daemonized."

def initialize(args, local_options, *)
super

@original_options = local_options - %w( --restart )
deprecate_positional_rack_server_and_rewrite_to_option(@original_options)
@log_stdout = options[:daemon].blank? && (options[:environment] || Rails.env) == "development"
end

def perform
@@ -166,7 +167,7 @@ def server_options
{
user_supplied_options: user_supplied_options,
server: using,
log_stdout: @log_stdout,
log_stdout: log_to_stdout?,
Port: port,
Host: host,
DoNotReverseLookup: true,
@@ -256,6 +257,12 @@ def early_hints
options[:early_hints]
end

def log_to_stdout?
options.fetch(:log_to_stdout) do
options[:daemon].blank? && environment == "development"
end
end

def pid
File.expand_path(options[:pid])
end
@@ -143,10 +143,22 @@ def test_log_stdout
options = parse_arguments(args)
assert_equal true, options[:log_stdout]

args = ["-e", "development", "-d"]
options = parse_arguments(args)
assert_equal false, options[:log_stdout]

args = ["-e", "production"]
options = parse_arguments(args)
assert_equal false, options[:log_stdout]

args = ["-e", "development", "--no-log-to-stdout"]
options = parse_arguments(args)
assert_equal false, options[:log_stdout]

args = ["-e", "production", "--log-to-stdout"]
options = parse_arguments(args)
assert_equal true, options[:log_stdout]

with_rack_env "development" do
args = []
options = parse_arguments(args)

0 comments on commit 889a7cc

Please sign in to comment.