aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2007-09-27 04:50:58 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2007-09-27 04:50:58 +0000
commit6f06ac6e1a2e2b3ebd9025c3e38b867e8279d6c9 (patch)
treeade7d2a79b0e103084a4d7f65bf3fa435b9801a3
parent1c68394b68507052103fc36406b140f23c348437 (diff)
downloadrails-6f06ac6e1a2e2b3ebd9025c3e38b867e8279d6c9.tar.gz
rails-6f06ac6e1a2e2b3ebd9025c3e38b867e8279d6c9.tar.bz2
rails-6f06ac6e1a2e2b3ebd9025c3e38b867e8279d6c9.zip
BufferedLogger#add doesn't modify the message argument. Closes #9702.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7643 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--activesupport/CHANGELOG2
-rw-r--r--activesupport/lib/active_support/buffered_logger.rb4
-rw-r--r--activesupport/test/buffered_logger_test.rb6
3 files changed, 11 insertions, 1 deletions
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG
index ea31261c95..737e60cda8 100644
--- a/activesupport/CHANGELOG
+++ b/activesupport/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* BufferedLogger#add doesn't modify the message argument. #9702 [eigentone]
+
* 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]
* Object#instance_exec produces fewer garbage methods. [Mauricio Fernandez]
diff --git a/activesupport/lib/active_support/buffered_logger.rb b/activesupport/lib/active_support/buffered_logger.rb
index c646b43d96..6025e1a6d0 100644
--- a/activesupport/lib/active_support/buffered_logger.rb
+++ b/activesupport/lib/active_support/buffered_logger.rb
@@ -52,7 +52,9 @@ module ActiveSupport
def add(severity, message = nil, progname = nil, &block)
return if @level > severity
message = message || (block && block.call) || progname
- message << "\n" unless message[-1] == ?\n
+ # If a newline is nessesary then create a new message end with a new line.
+ # Ensures that the original message is not mutated.
+ message = "#{message}\n" unless message[-1] == ?\n
@buffer << message
flush if auto_flushing
message
diff --git a/activesupport/test/buffered_logger_test.rb b/activesupport/test/buffered_logger_test.rb
index 7d55715084..f15b4c3a37 100644
--- a/activesupport/test/buffered_logger_test.rb
+++ b/activesupport/test/buffered_logger_test.rb
@@ -38,4 +38,10 @@ class BufferedLoggerTest < Test::Unit::TestCase
@logger.add(Logger::DEBUG) {evaluated = true}
assert evaluated == false
end
+
+ def test_should_not_mutate_message
+ message_copy = @message.dup
+ @logger.info @message
+ assert_equal message_copy, @message
+ end
end