aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Doits <markus.doits@stellenticket.de>2018-07-08 17:28:34 +0200
committerMarkus Doits <markus.doits@stellenticket.de>2018-07-08 17:28:34 +0200
commit889a7ccf086c23baccb52342a631f1be81405e6b (patch)
tree784cd715b6bf4fefc08b92b8e191b83b153e546c
parent79edcaeb6ccd7f95029e36dd1a13369b119edfdf (diff)
downloadrails-889a7ccf086c23baccb52342a631f1be81405e6b.tar.gz
rails-889a7ccf086c23baccb52342a631f1be81405e6b.tar.bz2
rails-889a7ccf086c23baccb52342a631f1be81405e6b.zip
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.
-rw-r--r--railties/lib/rails/commands/server/server_command.rb11
-rw-r--r--railties/test/commands/server_test.rb12
2 files changed, 21 insertions, 2 deletions
diff --git a/railties/lib/rails/commands/server/server_command.rb b/railties/lib/rails/commands/server/server_command.rb
index 194db23f14..070571f6f8 100644
--- a/railties/lib/rails/commands/server/server_command.rb
+++ b/railties/lib/rails/commands/server/server_command.rb
@@ -132,13 +132,14 @@ module Rails
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 @@ module Rails
{
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 @@ module Rails
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
diff --git a/railties/test/commands/server_test.rb b/railties/test/commands/server_test.rb
index a20fece960..e5b1da6ea4 100644
--- a/railties/test/commands/server_test.rb
+++ b/railties/test/commands/server_test.rb
@@ -143,10 +143,22 @@ class Rails::Command::ServerCommandTest < ActiveSupport::TestCase
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)