提交 d0755b98 编写于 作者: J Jeremy Kemper

Disabling auto_flushing still flushes when the buffer hits a maximum size, as...

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
上级 41bfedea
...@@ -2,7 +2,7 @@ ...@@ -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] * 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] * Fixed Date#xmlschema for dates outside the range of what can be created with Time #9744 [Geoff Buesing]
......
...@@ -11,6 +11,8 @@ module Severity ...@@ -11,6 +11,8 @@ module Severity
end end
include Severity include Severity
MAX_BUFFER_SIZE = 1000
# Set to false to disable the silencer # Set to false to disable the silencer
cattr_accessor :silencer cattr_accessor :silencer
self.silencer = true self.silencer = true
...@@ -57,7 +59,7 @@ def add(severity, message = nil, progname = nil, &block) ...@@ -57,7 +59,7 @@ def add(severity, message = nil, progname = nil, &block)
# Ensures that the original message is not mutated. # Ensures that the original message is not mutated.
message = "#{message}\n" unless message[-1] == ?\n message = "#{message}\n" unless message[-1] == ?\n
@buffer << message @buffer << message
auto_flush if auto_flushing auto_flush
message message
end end
...@@ -78,16 +80,13 @@ def #{severity.downcase}? ...@@ -78,16 +80,13 @@ def #{severity.downcase}?
# never auto-flush. If you turn auto-flushing off, be sure to regularly # 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. # flush the log yourself -- it will eat up memory until you do.
def auto_flushing=(period) def auto_flushing=(period)
case period @auto_flushing =
when true case period
@auto_flushing = 1 when true; 1
when 0 when false, nil, 0; MAX_BUFFER_SIZE
@auto_flushing = false when Integer; period
when false, nil, Integer else raise ArgumentError, "Unrecognized auto_flushing period: #{period.inspect}"
@auto_flushing = period end
else
raise ArgumentError, "Unrecognized auto_flushing period: #{period.inspect}"
end
end end
def flush def flush
......
...@@ -71,6 +71,19 @@ def test_should_not_mutate_message ...@@ -71,6 +71,19 @@ def test_should_not_mutate_message
@logger.flush @logger.flush
assert !@output.string.empty?, @logger.buffer.size assert !@output.string.empty?, @logger.buffer.size
end 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 end
def test_should_auto_flush_every_n_messages def test_should_auto_flush_every_n_messages
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册