mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Disabling auto_flushing still flushes when the buffer hits a maximum size, as a failsafe against memory-gobbling.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7739 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
41bfedeac2
commit
d0755b9814
3 changed files with 24 additions and 12 deletions
|
@ -2,7 +2,7 @@
|
|||
|
||||
* Hash#to_json takes :only or :except options to specific or omit certain hash keys. Enumerable#to_json passes through its options to each element. #9751 [Chu Yeow]
|
||||
|
||||
* BufferedLogger#auto_flushing = N flushes the log every N messages. Buffers with an array instead of string. [Jeremy Kemper]
|
||||
* BufferedLogger#auto_flushing = N flushes the log every N messages. Buffers with an array instead of string. Disabling auto_flushing still flushes when the buffer hits a maximum size, as a failsafe against memory-gobbling. [Jeremy Kemper]
|
||||
|
||||
* Fixed Date#xmlschema for dates outside the range of what can be created with Time #9744 [Geoff Buesing]
|
||||
|
||||
|
|
|
@ -11,6 +11,8 @@ module ActiveSupport
|
|||
end
|
||||
include Severity
|
||||
|
||||
MAX_BUFFER_SIZE = 1000
|
||||
|
||||
# Set to false to disable the silencer
|
||||
cattr_accessor :silencer
|
||||
self.silencer = true
|
||||
|
@ -57,7 +59,7 @@ module ActiveSupport
|
|||
# Ensures that the original message is not mutated.
|
||||
message = "#{message}\n" unless message[-1] == ?\n
|
||||
@buffer << message
|
||||
auto_flush if auto_flushing
|
||||
auto_flush
|
||||
message
|
||||
end
|
||||
|
||||
|
@ -78,16 +80,13 @@ module ActiveSupport
|
|||
# never auto-flush. If you turn auto-flushing off, be sure to regularly
|
||||
# flush the log yourself -- it will eat up memory until you do.
|
||||
def auto_flushing=(period)
|
||||
case period
|
||||
when true
|
||||
@auto_flushing = 1
|
||||
when 0
|
||||
@auto_flushing = false
|
||||
when false, nil, Integer
|
||||
@auto_flushing = period
|
||||
else
|
||||
raise ArgumentError, "Unrecognized auto_flushing period: #{period.inspect}"
|
||||
end
|
||||
@auto_flushing =
|
||||
case period
|
||||
when true; 1
|
||||
when false, nil, 0; MAX_BUFFER_SIZE
|
||||
when Integer; period
|
||||
else raise ArgumentError, "Unrecognized auto_flushing period: #{period.inspect}"
|
||||
end
|
||||
end
|
||||
|
||||
def flush
|
||||
|
|
|
@ -71,6 +71,19 @@ class BufferedLoggerTest < Test::Unit::TestCase
|
|||
@logger.flush
|
||||
assert !@output.string.empty?, @logger.buffer.size
|
||||
end
|
||||
|
||||
define_method "test_disabling_auto_flush_with_#{disable.inspect}_should_flush_at_max_buffer_size_as_failsafe" do
|
||||
@logger.auto_flushing = disable
|
||||
assert_equal ActiveSupport::BufferedLogger::MAX_BUFFER_SIZE, @logger.auto_flushing
|
||||
|
||||
(ActiveSupport::BufferedLogger::MAX_BUFFER_SIZE - 1).times do
|
||||
@logger.info 'wait for it..'
|
||||
assert @output.string.empty?, @output.string
|
||||
end
|
||||
|
||||
@logger.info 'there it is.'
|
||||
assert !@output.string.empty?, @logger.buffer.size
|
||||
end
|
||||
end
|
||||
|
||||
def test_should_auto_flush_every_n_messages
|
||||
|
|
Loading…
Reference in a new issue