aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activesupport/CHANGELOG2
-rw-r--r--activesupport/lib/active_support/clean_logger.rb49
-rw-r--r--activesupport/test/clean_logger_test.rb37
3 files changed, 50 insertions, 38 deletions
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG
index 75ff34dce9..d977682f5c 100644
--- a/activesupport/CHANGELOG
+++ b/activesupport/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Backport clean_logger changes to support ruby 1.8.2 [mislav]
+
* Added proper handling of arrays #8537 [hasmanyjosh]
Before:
diff --git a/activesupport/lib/active_support/clean_logger.rb b/activesupport/lib/active_support/clean_logger.rb
index 65ab50e66b..7ce9faba48 100644
--- a/activesupport/lib/active_support/clean_logger.rb
+++ b/activesupport/lib/active_support/clean_logger.rb
@@ -44,12 +44,50 @@ class Logger
formatter.datetime_format if formatter.respond_to?(:datetime_format)
end
- alias :old_formatter :formatter
+ alias :old_formatter :formatter if method_defined?(:formatter)
# Get the current formatter. The default formatter is a SimpleFormatter which only
# displays the log message
def formatter
@formatter ||= SimpleFormatter.new
end
+
+ unless const_defined? :Formatter
+ class Formatter
+ Format = "%s, [%s#%d] %5s -- %s: %s\n"
+
+ attr_accessor :datetime_format
+
+ def initialize
+ @datetime_format = nil
+ end
+
+ def call(severity, time, progname, msg)
+ Format % [severity[0..0], format_datetime(time), $$, severity, progname,
+ msg2str(msg)]
+ end
+
+ private
+ def format_datetime(time)
+ if @datetime_format.nil?
+ time.strftime("%Y-%m-%dT%H:%M:%S.") << "%06d " % time.usec
+ else
+ time.strftime(@datetime_format)
+ end
+ end
+
+ def msg2str(msg)
+ case msg
+ when ::String
+ msg
+ when ::Exception
+ "#{ msg.message } (#{ msg.class })\n" <<
+ (msg.backtrace || []).join("\n")
+ else
+ msg.inspect
+ end
+ end
+ end
+ end
# Simple formatter which only displays the message.
class SimpleFormatter < Logger::Formatter
@@ -74,5 +112,14 @@ class Logger
def format_message(severity, timestamp, msg, progname)
formatter.call(severity, timestamp, progname, msg)
end
+
+ attr_writer :formatter
+ public :formatter=
+
+ alias old_format_datetime format_datetime
+ def format_datetime(datetime) datetime end
+
+ alias old_msg2str msg2str
+ def msg2str(msg) msg end
end
end
diff --git a/activesupport/test/clean_logger_test.rb b/activesupport/test/clean_logger_test.rb
index ce48107242..b972869c90 100644
--- a/activesupport/test/clean_logger_test.rb
+++ b/activesupport/test/clean_logger_test.rb
@@ -48,40 +48,3 @@ class CleanLoggerTest < Test::Unit::TestCase
assert_match(/D, \[\d\d\d\d-\d\d-\d\d#\d+\] DEBUG -- : debug/, @out.string)
end
end
-
-class CleanLogger_182_to_183_Test < Test::Unit::TestCase
- def setup
- silence_warnings do
- if Logger.method_defined?(:formatter=)
- Logger.send(:alias_method, :hide_formatter=, :formatter=)
- Logger.send(:undef_method, :formatter=)
- else
- Logger.send(:define_method, :formatter=) { }
- end
- load File.dirname(__FILE__) + '/../lib/active_support/clean_logger.rb'
- end
-
- @out = StringIO.new
- @logger = Logger.new(@out)
- @logger.progname = 'CLEAN LOGGER TEST'
- end
-
- def teardown
- silence_warnings do
- if Logger.method_defined?(:hide_formatter=)
- Logger.send(:alias_method, :formatter=, :hide_formatter=)
- else
- Logger.send(:undef_method, :formatter=)
- end
- load File.dirname(__FILE__) + '/../lib/active_support/clean_logger.rb'
- end
- end
-
- # Since we've fooled Logger into thinking we're on 1.8.2 if we're on 1.8.3
- # and on 1.8.3 if we're on 1.8.2, it'll define format_message with the
- # wrong order of arguments and therefore print progname instead of msg.
- def test_format_message_with_faked_version
- @logger.error 'error'
- assert_equal "CLEAN LOGGER TEST\n", @out.string
- end
-end