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
This commit is contained in:
Jeremy Kemper 2007-09-27 04:50:58 +00:00
parent 1c68394b68
commit 6f06ac6e1a
3 changed files with 11 additions and 1 deletions

View File

@ -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]

View File

@ -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

View File

@ -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