From 79a9c7a702f4bccb2af5c82bb9a78209b28ab1c7 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 25 Sep 2007 03:47:37 +0000 Subject: Added ActiveSupport::BufferedLogger as a duck-typing alternative (albeit with no formatter) to the Ruby Logger, which provides a very nice speed bump (inspired by Ezra's buffered logger) [DHH] Changed the default logger from Ruby's own Logger with the clean_logger extensions to ActiveSupport::BufferedLogger for performance reasons [DHH]. (You can change it back with config.logger = Logger.new(/path/to/log, level).) git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7626 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- railties/lib/dispatcher.rb | 11 ++++++++--- railties/lib/initializer.rb | 11 ++++++----- 2 files changed, 14 insertions(+), 8 deletions(-) (limited to 'railties/lib') diff --git a/railties/lib/dispatcher.rb b/railties/lib/dispatcher.rb index cb1289957e..398acb7e97 100644 --- a/railties/lib/dispatcher.rb +++ b/railties/lib/dispatcher.rb @@ -38,13 +38,14 @@ class Dispatcher controller = ActionController::Routing::Routes.recognize(request) controller.process(request, response).out(output) end - rescue Exception => exception # errors from CGI dispatch + rescue Exception => exception # errors from CGI dispatch failsafe_response(cgi, output, '500 Internal Server Error', exception) do controller ||= (ApplicationController rescue ActionController::Base) controller.process_with_exception(request, response, exception).out(output) end ensure - # Do not give a failsafe response here. + # Do not give a failsafe response here + flush_logger reset_after_dispatch end @@ -165,9 +166,13 @@ class Dispatcher if defined?(RAILS_DEFAULT_LOGGER) && !RAILS_DEFAULT_LOGGER.nil? RAILS_DEFAULT_LOGGER else - Logger.new($stderr) + ActiveSupport::BufferedLogger.new($stderr) end end + + def flush_logger + RAILS_DEFAULT_LOGGER.flush if defined?(RAILS_DEFAULT_LOGGER) && RAILS_DEFAULT_LOGGER.respond_to?(:flush) + end end end diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb index b9fa9eee01..c2862ee443 100644 --- a/railties/lib/initializer.rb +++ b/railties/lib/initializer.rb @@ -240,11 +240,12 @@ module Rails unless logger = configuration.logger begin - logger = Logger.new(configuration.log_path) - logger.level = Logger.const_get(configuration.log_level.to_s.upcase) - rescue StandardError - logger = Logger.new(STDERR) - logger.level = Logger::WARN + logger = ActiveSupport::BufferedLogger.new(configuration.log_path) + logger.level = ActiveSupport::BufferedLogger.const_get(configuration.log_level.to_s.upcase) + logger.auto_flushing = false if configuration.environment == "production" + rescue StandardError =>e + logger = ActiveSupport::BufferedLogger.new(STDERR) + logger.level = ActiveSupport::BufferedLogger::WARN logger.warn( "Rails Error: Unable to access log file. Please ensure that #{configuration.log_path} exists and is chmod 0666. " + "The log level has been raised to WARN and the output directed to STDERR until the problem is fixed." -- cgit v1.2.3