Changeset 7732
- Timestamp:
- 10/03/07 23:43:12 (1 year ago)
- Files:
-
- trunk/activesupport/CHANGELOG (modified) (1 diff)
- trunk/activesupport/lib/active_support/buffered_logger.rb (modified) (4 diffs)
- trunk/activesupport/test/buffered_logger_test.rb (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/activesupport/CHANGELOG
r7707 r7732 1 1 *SVN* 2 3 * BufferedLogger#auto_flushing = N flushes the log every N messages. Buffers with an array instead of string. [Jeremy Kemper] 2 4 3 5 * Fixed Date#xmlschema for dates outside the range of what can be created with Time #9744 [gbuesing] trunk/activesupport/lib/active_support/buffered_logger.rb
r7664 r7732 30 30 end 31 31 32 attr_accessor :level, :auto_flushing 32 attr_accessor :level 33 attr_reader :auto_flushing 33 34 attr_reader :buffer 34 35 35 36 def initialize(log, level = DEBUG) 36 37 @level = level 37 @buffer = ""38 @auto_flushing = true38 @buffer = [] 39 @auto_flushing = 1 39 40 40 41 if log.respond_to?(:write) … … 57 58 message = "#{message}\n" unless message[-1] == ?\n 58 59 @buffer << message 59 flush if auto_flushing60 auto_flush if auto_flushing 60 61 message 61 62 end … … 73 74 end 74 75 76 # Set the auto-flush period. Set to true to flush after every log message, 77 # to an integer to flush every N messages, or to false, nil, or zero to 78 # never auto-flush. If you turn auto-flushing off, be sure to regularly 79 # flush the log yourself -- it will eat up memory until you do. 80 def auto_flushing=(period) 81 case period 82 when true 83 @auto_flushing = 1 84 when 0 85 @auto_flushing = false 86 when false, nil, Integer 87 @auto_flushing = period 88 else 89 raise ArgumentError, "Unrecognized auto_flushing period: #{period.inspect}" 90 end 91 end 92 75 93 def flush 76 return if @buffer.size == 0 77 @log.write(@buffer.slice!(0..-1)) 94 @log.write(@buffer.slice!(0..-1)) unless @buffer.empty? 78 95 end 79 96 … … 83 100 @log = nil 84 101 end 102 103 protected 104 def auto_flush 105 flush if @buffer.size >= @auto_flushing 106 end 85 107 end 86 108 end trunk/activesupport/test/buffered_logger_test.rb
r7664 r7732 9 9 @logger = ActiveSupport::BufferedLogger.new(@output) 10 10 end 11 11 12 12 def test_should_log_debugging_message_when_debugging 13 13 @logger.level = Logger::DEBUG … … 27 27 assert @output.string.include?(@message) 28 28 end 29 29 30 30 def test_should_add_message_passed_as_block_when_using_shortcut 31 31 @logger.level = Logger::INFO … … 33 33 assert @output.string.include?(@message) 34 34 end 35 35 36 36 def test_should_convert_message_to_string 37 37 @logger.level = Logger::INFO … … 39 39 assert @output.string.include?(@integer_message.to_s) 40 40 end 41 41 42 42 def test_should_convert_message_to_string_when_passed_in_block 43 43 @logger.level = Logger::INFO … … 45 45 assert @output.string.include?(@integer_message.to_s) 46 46 end 47 47 48 48 def test_should_not_evaluate_block_if_message_wont_be_logged 49 49 @logger.level = Logger::INFO 50 50 evaluated = false 51 51 @logger.add(Logger::DEBUG) {evaluated = true} 52 assert evaluated == false 52 assert evaluated == false 53 53 end 54 54 55 55 def test_should_not_mutate_message 56 56 message_copy = @message.dup … … 58 58 assert_equal message_copy, @message 59 59 end 60 61 62 [false, nil, 0].each do |disable| 63 define_method "test_disabling_auto_flush_with_#{disable.inspect}_should_buffer_until_explicit_flush" do 64 @logger.auto_flushing = disable 65 66 4.times do 67 @logger.info 'wait for it..' 68 assert @output.string.empty?, @output.string 69 end 70 71 @logger.flush 72 assert !@output.string.empty?, @logger.buffer.size 73 end 74 end 75 76 def test_should_auto_flush_every_n_messages 77 @logger.auto_flushing = 5 78 79 4.times do 80 @logger.info 'wait for it..' 81 assert @output.string.empty?, @output.string 82 end 83 84 @logger.info 'there it is.' 85 assert !@output.string.empty?, @output.string 86 end 60 87 end