|
|
diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb
index 55e1d48..2d173ad 100644
--- a/actionpack/lib/action_controller/base.rb
+++ b/actionpack/lib/action_controller/base.rb
@@ -331,6 +331,14 @@ module ActionController #:nodoc:
# Can be set to nil for no logging. Compatible with both Ruby's own Logger and Log4r loggers.
cattr_accessor :logger
+ def self.logger
+ @@logger ||= ActiveSupport::NilLogger.new
+ end
+
+ def self.logger=(new_logger)
+ @@logger = new_logger.nil? ? ActiveSupport::NilLogger.new : new_logger
+ end
+
# Controls the resource action separator
@@resource_action_separator = "/"
cattr_accessor :resource_action_separator
@@ -1067,7 +1075,7 @@ module ActionController #:nodoc:
end
response.redirected_to= options
- logger.info("Redirected to #{options}") if logger && logger.info?
+ logger.info("Redirected to #{options}")
case options
when %r{^\w+://.*}
@@ -1125,7 +1133,7 @@ module ActionController #:nodoc:
private
def render_for_file(template_path, status = nil, use_full_path = nil, locals = {}) #:nodoc:
add_variables_to_assigns
- logger.info("Rendering #{template_path}" + (status ? " (#{status})" : '')) if logger
+ logger.info("Rendering #{template_path}" + (status ? " (#{status})" : ''))
render_for_text(@template.render(:file => template_path, :locals => locals), status)
end
@@ -1171,11 +1179,9 @@ module ActionController #:nodoc:
end
def log_processing
- if logger && logger.info?
- logger.info "\n\nProcessing #{self.class.name}\##{action_name} (for #{request_origin}) [#{request.method.to_s.upcase}]"
- logger.info " Session ID: #{@_session.session_id}" if @_session and @_session.respond_to?(:session_id)
- logger.info " Parameters: #{respond_to?(:filter_parameters) ? filter_parameters(params).inspect : params.inspect}"
- end
+ logger.info "\n\nProcessing #{self.class.name}\##{action_name} (for #{request_origin}) [#{request.method.to_s.upcase}]"
+ logger.info " Session ID: #{@_session.session_id}" if @_session and @_session.respond_to?(:session_id)
+ logger.info " Parameters: #{respond_to?(:filter_parameters) ? filter_parameters(params).inspect : params.inspect}"
end
def default_render #:nodoc:
diff --git a/actionpack/lib/action_controller/benchmarking.rb b/actionpack/lib/action_controller/benchmarking.rb
index 98b0325..267b967 100644
--- a/actionpack/lib/action_controller/benchmarking.rb
+++ b/actionpack/lib/action_controller/benchmarking.rb
@@ -21,7 +21,7 @@ module ActionController #:nodoc:
# easy to include benchmarking statements in production software that will remain inexpensive because the benchmark
# will only be conducted if the log level is low enough.
def benchmark(title, log_level = Logger::DEBUG, use_silence = true)
- if logger && logger.level == log_level
+ if logger.level == log_level
result = nil
seconds = Benchmark.realtime { result = use_silence ? silence { yield } : yield }
logger.add(log_level, "#{title} (#{'%.5f' % seconds})")
@@ -33,16 +33,16 @@ module ActionController #:nodoc:
# Silences the logger for the duration of the block.
def silence
- old_logger_level, logger.level = logger.level, Logger::ERROR if logger
+ old_logger_level, logger.level = logger.level, Logger::ERROR
yield
ensure
- logger.level = old_logger_level if logger
+ logger.level = old_logger_level
end
end
protected
def render_with_benchmark(options = nil, extra_options = {}, &block)
- unless logger
+ unless logger.info?
render_without_benchmark(options, extra_options, &block)
else
db_runtime = ActiveRecord::Base.connection.reset_runtime if Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected?
@@ -62,7 +62,7 @@ module ActionController #:nodoc:
private
def perform_action_with_benchmark
- unless logger
+ unless logger.info?
perform_action_without_benchmark
else
runtime = [ Benchmark::measure{ perform_action_without_benchmark }.real, 0.0001 ].max
diff --git a/actionpack/lib/action_controller/components.rb b/actionpack/lib/action_controller/components.rb
index 8275bd3..315089a 100644
--- a/actionpack/lib/action_controller/components.rb
+++ b/actionpack/lib/action_controller/components.rb
@@ -144,14 +144,10 @@ module ActionController #:nodoc:
end
def component_logging(options)
- if logger
- logger.info "Start rendering component (#{options.inspect}): "
- result = yield
- logger.info "\n\nEnd of component rendering"
- result
- else
- yield
- end
+ logger.info "Start rendering component (#{options.inspect}): "
+ result = yield
+ logger.info "\n\nEnd of component rendering"
+ result
end
def set_session_options_with_components(request)
diff --git a/actionpack/lib/action_controller/cookies.rb b/actionpack/lib/action_controller/cookies.rb
index 0428f2a..e97a113 100644
--- a/actionpack/lib/action_controller/cookies.rb
+++ b/actionpack/lib/action_controller/cookies.rb
@@ -99,7 +99,7 @@ module ActionController #:nodoc:
def set_cookie(options) #:doc:
options["path"] = "/" unless options["path"]
cookie = CGI::Cookie.new(options)
- @controller.logger.info "Cookie set: #{cookie}" unless @controller.logger.nil?
+ @controller.logger.info "Cookie set: #{cookie}"
@controller.response.headers["cookie"] << cookie
end
end
diff --git a/actionpack/lib/action_controller/dispatcher.rb b/actionpack/lib/action_controller/dispatcher.rb
index bdae5f9..b15ffae 100644
--- a/actionpack/lib/action_controller/dispatcher.rb
+++ b/actionpack/lib/action_controller/dispatcher.rb
@@ -24,7 +24,7 @@ module ActionController
to_prepare(:activerecord_instantiate_observers) { ActiveRecord::Base.instantiate_observers }
end
- after_dispatch :flush_logger if Base.logger && Base.logger.respond_to?(:flush)
+ after_dispatch :flush_logger if Base.logger.respond_to?(:flush)
end
# Backward-compatible class method takes CGI-specific args. Deprecated
diff --git a/actionpack/lib/action_controller/filters.rb b/actionpack/lib/action_controller/filters.rb
index 1d7236f..ee15d88 100644
--- a/actionpack/lib/action_controller/filters.rb
+++ b/actionpack/lib/action_controller/filters.rb
@@ -673,7 +673,7 @@ module ActionController #:nodoc:
def halt_filter_chain(filter, reason)
@before_filter_chain_aborted = true
- logger.info "Filter chain halted as [#{filter.inspect}] #{reason}." if logger
+ logger.info "Filter chain halted as [#{filter.inspect}] #{reason}."
end
end
end
diff --git a/actionpack/lib/action_controller/layout.rb b/actionpack/lib/action_controller/layout.rb
index 8b6febe..a3d064c 100644
--- a/actionpack/lib/action_controller/layout.rb
+++ b/actionpack/lib/action_controller/layout.rb
@@ -246,7 +246,7 @@ module ActionController #:nodoc:
if (layout = pick_layout(template_with_options, options)) && apply_layout?(template_with_options, options)
options = options.merge :layout => false if template_with_options
- logger.info("Rendering template within #{layout}") if logger
+ logger.info("Rendering template within #{layout}")
content_for_layout = render_with_no_layout(options, extra_options, &block)
erase_render_results
diff --git a/actionpack/lib/action_controller/rescue.rb b/actionpack/lib/action_controller/rescue.rb
index a1a9d68..c82bdbd 100644
--- a/actionpack/lib/action_controller/rescue.rb
+++ b/actionpack/lib/action_controller/rescue.rb
@@ -115,7 +115,7 @@ module ActionController #:nodoc:
if handler_for_rescue(exception)
rescue_action_with_handler(exception)
else
- log_error(exception) if logger
+ log_error(exception) if logger.fatal?
erase_results if performed?
# Let the exception alter the response if it wants.
diff --git a/actionpack/lib/action_controller/streaming.rb b/actionpack/lib/action_controller/streaming.rb
index 333fb61..29c85d8 100644
--- a/actionpack/lib/action_controller/streaming.rb
+++ b/actionpack/lib/action_controller/streaming.rb
@@ -82,12 +82,12 @@ module ActionController #:nodoc:
@performed_render = false
if options[:x_sendfile]
- logger.info "Sending #{X_SENDFILE_HEADER} header #{path}" if logger
+ logger.info "Sending #{X_SENDFILE_HEADER} header #{path}"
head options[:status], X_SENDFILE_HEADER => path
else
if options[:stream]
render :status => options[:status], :text => Proc.new { |response, output|
- logger.info "Streaming file #{path}" unless logger.nil?
+ logger.info "Streaming file #{path}"
len = options[:buffer_size] || 4096
File.open(path, 'rb') do |file|
while buf = file.read(len)
@@ -96,7 +96,7 @@ module ActionController #:nodoc:
end
}
else
- logger.info "Sending file #{path}" unless logger.nil?
+ logger.info "Sending file #{path}"
File.open(path, 'rb') { |file| render :status => options[:status], :text => file.read }
end
end
@@ -126,7 +126,7 @@ module ActionController #:nodoc:
#
# See +send_file+ for more information on HTTP Content-* headers and caching.
def send_data(data, options = {}) #:doc:
- logger.info "Sending data #{options[:filename]}" if logger
+ logger.info "Sending data #{options[:filename]}"
send_file_headers! options.merge(:length => data.size)
@performed_render = false
render :status => options[:status], :text => data
diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb
index c65048b..96aacdc 100644
--- a/actionpack/lib/action_view/base.rb
+++ b/actionpack/lib/action_view/base.rb
@@ -328,7 +328,7 @@ module ActionView #:nodoc:
else
template = Template.new(template_path, view_paths)
- if self.class.warn_cache_misses && logger
+ if self.class.warn_cache_misses && logger.debug?
logger.debug "[PERFORMANCE] Rendering a template that was " +
"not found in view path. Templates outside the view path are " +
"not cached and result in expensive disk operations. Move this " +
diff --git a/actionpack/lib/action_view/helpers/benchmark_helper.rb b/actionpack/lib/action_view/helpers/benchmark_helper.rb
index 743d1d4..30c26db 100644
--- a/actionpack/lib/action_view/helpers/benchmark_helper.rb
+++ b/actionpack/lib/action_view/helpers/benchmark_helper.rb
@@ -21,12 +21,8 @@ module ActionView
# You may give an optional logger level as the second argument
# (:debug, :info, :warn, :error); the default value is :info.
def benchmark(message = "Benchmarking", level = :info)
- if controller.logger
- real = Benchmark.realtime { yield }
- controller.logger.send(level, "#{message} (#{'%.5f' % real})")
- else
- yield
- end
+ real = Benchmark.realtime { yield }
+ controller.logger.send(level, "#{message} (#{'%.5f' % real})")
end
end
end
diff --git a/actionpack/test/controller/base_test.rb b/actionpack/test/controller/base_test.rb
index d49cc2a..63991ef 100644
--- a/actionpack/test/controller/base_test.rb
+++ b/actionpack/test/controller/base_test.rb
@@ -157,10 +157,13 @@ class PerformActionTest < Test::Unit::TestCase
end
def test_namespaced_action_should_log_module_name
+ original_logger = ActionController::Base.logger
use_controller Submodule::ContainedNonEmptyController
- @controller.logger = MockLogger.new
+ ActionController::Base.logger = MockLogger.new
get :public_action
- assert_match /Processing\sSubmodule::ContainedNonEmptyController#public_action/, @controller.logger.logged[1]
+ assert_match /Processing\sSubmodule::ContainedNonEmptyController#public_action/, @controller.logger.logged[0]
+ ensure
+ ActionController::Base.logger = original_logger
end
end
diff --git a/activerecord/lib/active_record/attribute_methods.rb b/activerecord/lib/active_record/attribute_methods.rb
index fab16a4..9cba62d 100644
--- a/activerecord/lib/active_record/attribute_methods.rb
+++ b/activerecord/lib/active_record/attribute_methods.rb
@@ -211,11 +211,9 @@ module ActiveRecord
class_eval(method_definition, __FILE__, __LINE__)
rescue SyntaxError => err
generated_methods.delete(attr_name)
- if logger
- logger.warn "Exception occurred during reader method compilation."
- logger.warn "Maybe #{attr_name} is not a valid Ruby identifier?"
- logger.warn "#{err.message}"
- end
+ logger.warn "Exception occurred during reader method compilation."
+ logger.warn "Maybe #{attr_name} is not a valid Ruby identifier?"
+ logger.warn "#{err.message}"
end
end
end # ClassMethods
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb
index 5c30f80..2973a54 100644
--- a/activerecord/lib/active_record/base.rb
+++ b/activerecord/lib/active_record/base.rb
@@ -392,6 +392,14 @@ module ActiveRecord #:nodoc:
# on to any new database connections made and which can be retrieved on both a class and instance level by calling +logger+.
cattr_accessor :logger, :instance_writer => false
+ def self.logger
+ @@logger ||= ActiveSupport::NilLogger.new
+ end
+
+ def self.logger=(new_logger)
+ @@logger = new_logger.nil? ? ActiveSupport::NilLogger.new : new_logger
+ end
+
def self.inherited(child) #:nodoc:
@@subclasses[self] ||= []
@@subclasses[self] << child
@@ -1314,7 +1322,7 @@ module ActiveRecord #:nodoc:
#
# The logging of the multiple statements is turned off unless use_silence is set to false.
def benchmark(title, log_level = Logger::DEBUG, use_silence = true)
- if logger && logger.level <= log_level
+ if logger.level <= log_level
result = nil
seconds = Benchmark.realtime { result = use_silence ? silence { yield } : yield }
logger.add(log_level, "#{title} (#{'%.5f' % seconds})")
@@ -1329,7 +1337,7 @@ module ActiveRecord #:nodoc:
old_logger_level, logger.level = logger.level, Logger::ERROR if logger
yield
ensure
- logger.level = old_logger_level if logger
+ logger.level = old_logger_level
end
# Overwrite the default class equality method to provide support for association proxies.
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
index 2a8807f..154ce31 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
@@ -39,7 +39,7 @@ module ActiveRecord
# set concurrency support flag (not thread safe, like most of the methods in this file)
def allow_concurrency=(threaded) #:nodoc:
- logger.debug "allow_concurrency=#{threaded}" if logger
+ logger.debug "allow_concurrency=#{threaded}"
return if @@allow_concurrency == threaded
clear_all_cached_connections!
@@allow_concurrency = threaded
@@ -48,7 +48,7 @@ module ActiveRecord
[:active_connections, :scoped_methods].each do |method|
sing.send(:alias_method, method, "#{method_prefix}_#{method}")
end
- log_connections if logger
+ log_connections
end
def active_connection_name #:nodoc:
@@ -299,11 +299,9 @@ module ActiveRecord
# connection state logging
def self.log_connections #:nodoc:
- if logger
- logger.info "Defined connections: #{@@defined_connections.inspect}"
- logger.info "Active connections: #{active_connections.inspect}"
- logger.info "Active connection name: #{@active_connection_name}"
- end
+ logger.info "Defined connections: #{@@defined_connections.inspect}"
+ logger.info "Active connections: #{active_connections.inspect}"
+ logger.info "Active connection name: #{@active_connection_name}"
end
end
end
diff --git a/activerecord/lib/active_record/fixtures.rb b/activerecord/lib/active_record/fixtures.rb
index 622cfc3..81c5e08 100644
--- a/activerecord/lib/active_record/fixtures.rb
+++ b/activerecord/lib/active_record/fixtures.rb
@@ -859,9 +859,7 @@ module Test #:nodoc:
# Let's warn in case this is a subdependency, otherwise
# subdependency error messages are totally cryptic
- if ActiveRecord::Base.logger
- ActiveRecord::Base.logger.warn("Unable to load #{file_name}, underlying cause #{e.message} \n\n #{e.backtrace.join("\n")}")
- end
+ ActiveRecord::Base.logger.warn("Unable to load #{file_name}, underlying cause #{e.message} \n\n #{e.backtrace.join("\n")}")
end
def require_fixture_classes(table_names = nil)
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb
index c811135..7b7a724 100644
--- a/activerecord/test/cases/base_test.rb
+++ b/activerecord/test/cases/base_test.rb
@@ -2010,4 +2010,18 @@ class BasicsTest < ActiveRecord::TestCase
ensure
ActiveRecord::Base.logger = original_logger
end
+
+ def test_benchmark_with_nil_logger
+ original_logger = ActiveRecord::Base.logger
+ testing = nil
+ ActiveRecord::Base.logger = nil
+ assert_kind_of ActiveSupport::NilLogger, ActiveRecord::Base.logger
+ assert_nothing_raised do
+ ActiveRecord::Base.benchmark("Logging", Logger::DEBUG, true) { testing = "Works" }
+ end
+ assert_equal 'Works', testing
+ ensure
+ ActiveRecord::Base.logger = original_logger
+ end
+
end
|