Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 8638

Show
Ignore:
Timestamp:
01/13/08 20:39:51 (8 months ago)
Author:
nzkoz
Message:

Use non-blocking writing if available. Closes #10794 [lifofifo]

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/activesupport/lib/active_support/buffered_logger.rb

    r8440 r8638  
    4040      @buffer        = [] 
    4141      @auto_flushing = 1 
     42      @no_block = false 
    4243 
    4344      if log.respond_to?(:write) 
     
    5354    end 
    5455 
     56    def set_non_blocking_io 
     57      if !RUBY_PLATFORM.match(/java|mswin/) && !(@log == STDOUT) && @log.respond_to?(:write_nonblock) 
     58        @no_block = true 
     59      end 
     60    end 
     61 
    5562    def add(severity, message = nil, progname = nil, &block) 
    5663      return if @level > severity 
     
    5966      # Ensures that the original message is not mutated. 
    6067      message = "#{message}\n" unless message[-1] == ?\n 
    61       @buffer << message 
     68      buffer << message 
    6269      auto_flush 
    6370      message 
     
    9198 
    9299    def flush 
    93       @log.write(@buffer.slice!(0..-1).join) unless @buffer.empty? 
     100      unless buffer.empty? 
     101        if @no_block 
     102          @log.write_nonblock(buffer.slice!(0..-1).join) 
     103        else 
     104          @log.write(buffer.slice!(0..-1).join) 
     105        end 
     106      end 
    94107    end 
    95108 
     
    102115    protected 
    103116      def auto_flush 
    104         flush if @buffer.size >= @auto_flushing 
     117        flush if buffer.size >= @auto_flushing 
    105118      end 
    106119  end 
  • trunk/railties/lib/initializer.rb

    r8546 r8638  
    251251          logger = ActiveSupport::BufferedLogger.new(configuration.log_path) 
    252252          logger.level = ActiveSupport::BufferedLogger.const_get(configuration.log_level.to_s.upcase) 
    253           logger.auto_flushing = false if configuration.environment == "production" 
     253          if configuration.environment == "production" 
     254            logger.auto_flushing = false 
     255            logger.set_non_blocking_io 
     256          end 
    254257        rescue StandardError =>e 
    255258          logger = ActiveSupport::BufferedLogger.new(STDERR)