Class | ActiveSupport::BufferedLogger |
In: |
vendor/rails/activesupport/lib/active_support/buffered_logger.rb
|
Parent: | Object |
Inspired by the buffered logger idea by Ezra
MAX_BUFFER_SIZE | = | 1000 |
auto_flushing | [R] | |
buffer | [R] | |
level | [RW] |
# File vendor/rails/activesupport/lib/active_support/buffered_logger.rb, line 38 38: def initialize(log, level = DEBUG) 39: @level = level 40: @buffer = [] 41: @auto_flushing = 1 42: 43: if log.respond_to?(:write) 44: @log = log 45: elsif File.exist?(log) 46: @log = open(log, (File::WRONLY | File::APPEND)) 47: @log.sync = true 48: else 49: @log = open(log, (File::WRONLY | File::APPEND | File::CREAT)) 50: @log.sync = true 51: @log.write("# Logfile created on %s" % [Time.now.to_s]) 52: end 53: end
# File vendor/rails/activesupport/lib/active_support/buffered_logger.rb, line 55 55: def add(severity, message = nil, progname = nil, &block) 56: return if @level > severity 57: message = (message || (block && block.call) || progname).to_s 58: # If a newline is necessary then create a new message ending with a newline. 59: # Ensures that the original message is not mutated. 60: message = "#{message}\n" unless message[-1] == ?\n 61: @buffer << message 62: auto_flush 63: message 64: end
Set the auto-flush period. Set to true to flush after every log message, to an integer to flush every N messages, or to false, nil, or zero to 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.
# File vendor/rails/activesupport/lib/active_support/buffered_logger.rb, line 83 83: def auto_flushing=(period) 84: @auto_flushing = 85: case period 86: when true; 1 87: when false, nil, 0; MAX_BUFFER_SIZE 88: when Integer; period 89: else raise ArgumentError, "Unrecognized auto_flushing period: #{period.inspect}" 90: end 91: end
# File vendor/rails/activesupport/lib/active_support/buffered_logger.rb, line 97 97: def close 98: flush 99: @log.close if @log.respond_to?(:close) 100: @log = nil 101: end
# File vendor/rails/activesupport/lib/active_support/buffered_logger.rb, line 93 93: def flush 94: @log.write(@buffer.slice!(0..-1).to_s) unless @buffer.empty? 95: end
Silences the logger for the duration of the block.
# File vendor/rails/activesupport/lib/active_support/buffered_logger.rb, line 21 21: def silence(temporary_level = ERROR) 22: if silencer 23: begin 24: old_logger_level, self.level = level, temporary_level 25: yield self 26: ensure 27: self.level = old_logger_level 28: end 29: else 30: yield self 31: end 32: end