Skip to content

Commit

Permalink
Merge pull request #50337 from Edouard-chin/ec-log-level
Browse files Browse the repository at this point in the history
Fix `config.log_level` being ignored when using a Broadcast Logger
  • Loading branch information
byroot committed Jan 4, 2024
2 parents 860ea32 + b6bb506 commit bbf6a36
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 3 deletions.
6 changes: 5 additions & 1 deletion railties/lib/rails/application/bootstrap.rb
Expand Up @@ -55,7 +55,11 @@ module Bootstrap
logger
end

unless Rails.logger.is_a?(ActiveSupport::BroadcastLogger)
if Rails.logger.is_a?(ActiveSupport::BroadcastLogger)
if config.broadcast_log_level
Rails.logger.level = ActiveSupport::Logger.const_get(config.broadcast_log_level.to_s.upcase)
end
else
Rails.logger.level = ActiveSupport::Logger.const_get(config.log_level.to_s.upcase)
broadcast_logger = ActiveSupport::BroadcastLogger.new(Rails.logger)
broadcast_logger.formatter = Rails.logger.formatter
Expand Down
13 changes: 11 additions & 2 deletions railties/lib/rails/application/configuration.rb
Expand Up @@ -19,13 +19,13 @@ class Configuration < ::Rails::Engine::Configuration
:ssl_options, :public_file_server,
:session_options, :time_zone, :reload_classes_only_on_change,
:beginning_of_week, :filter_redirect, :x,
:read_encrypted_secrets, :log_level, :content_security_policy_report_only,
:read_encrypted_secrets, :content_security_policy_report_only,
:content_security_policy_nonce_generator, :content_security_policy_nonce_directives,
:require_master_key, :credentials, :disable_sandbox, :sandbox_by_default,
:add_autoload_paths_to_load_path, :rake_eager_load, :server_timing, :log_file_size,
:dom_testing_default_html_version

attr_reader :encoding, :api_only, :loaded_config_version
attr_reader :encoding, :api_only, :loaded_config_version, :log_level

def initialize(*)
super
Expand Down Expand Up @@ -373,6 +373,15 @@ def api_only=(value)
@debug_exception_response_format ||= :api
end

def log_level=(level)
@log_level = level
@broadcast_log_level = level
end

def broadcast_log_level # :nodoc:
defined?(@broadcast_log_level) ? @broadcast_log_level : nil
end

def debug_exception_response_format
@debug_exception_response_format || :default
end
Expand Down
25 changes: 25 additions & 0 deletions railties/test/application/configuration_test.rb
Expand Up @@ -1929,6 +1929,31 @@ def index
assert_equal Logger::DEBUG, Rails.logger.level
end

test "config.log_level does not override the level of the broadcast with the default value" do
add_to_config <<-RUBY
stdout = Logger.new(STDOUT, level: Logger::INFO)
stderr = Logger.new(STDERR, level: Logger::ERROR)
config.logger = ActiveSupport::BroadcastLogger.new(stdout, stderr)
RUBY

app "development"

assert_equal([Logger::INFO, Logger::ERROR], Rails.logger.broadcasts.map(&:level))
end

test "config.log_level overrides the level of the broadcast when a custom value is set" do
add_to_config <<-RUBY
stdout = Logger.new(STDOUT)
stderr = Logger.new(STDERR)
config.logger = ActiveSupport::BroadcastLogger.new(stdout, stderr)
config.log_level = :warn
RUBY

app "development"

assert_equal([Logger::WARN, Logger::WARN], Rails.logger.broadcasts.map(&:level))
end

test "config.logger when logger is already a Broadcast Logger" do
logger = ActiveSupport::BroadcastLogger.new

Expand Down

0 comments on commit bbf6a36

Please sign in to comment.