Changeset 714

Show
Ignore:
Timestamp:
10/03/07 21:01:31 (1 year ago)
Author:
e.@brainspl.at
Message:

some updates to the buffered logger

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/merb/logger.rb

    r662 r714  
    11module Merb 
    2   # Logging is called several times for each request, so keep it short and 
    3   # sweet. Use << for atomic add to buffer, and slice! for atomic removal. 
    42 
    53  class Logger 
     
    1513 
    1614    attr_accessor :level 
    17     attr_reader :buf 
    18     def initialize(log) 
     15    attr_reader :buffer 
     16     
     17    def initialize(log, level = DEBUG) 
    1918      @level = level 
    20       @buf = "" 
     19      @buffer = [] 
    2120      if log.respond_to?(:write) 
    2221        @log = log 
     
    3231 
    3332    def flush 
    34       return if @buf.size == 0 
    35       @log.write @buf.slice!(0..-1) 
     33      @log.write @buffer.slice!(0..-1).to_s unless  @buffer.size == 0 
    3634    end 
    3735 
    3836    def close 
    3937      flush 
    40       @log.close if @log.respond_to? :close 
     38      @log.close if @log.respond_to?(:close) 
    4139      @log = nil 
    4240    end 
    4341 
    44     def debug(msg) 
    45       return if @level > DEBUG 
    46       msg << "\n" unless msg[-1] == ?\n 
    47       @buf << msg 
     42    def add(severity, message = nil, progname = nil, &block) 
     43      return if @level > severity 
     44      message = (message || (block && block.call) || progname).to_s 
     45      # If a newline is necessary then create a new message ending with a newline. 
     46      # Ensures that the original message is not mutated. 
     47      message = "#{message}\n" unless message[-1] == ?\n 
     48      @buffer << message 
     49      message 
    4850    end 
    49     def info(msg) 
    50       return if @level > INFO 
    51       msg << "\n" unless msg[-1] == ?\n 
    52       @buf << msg 
     51     
     52    Severity.constants.each do |severity| 
     53      class_eval <<-EOT 
     54        def #{severity.downcase}(message = nil, progname = nil, &block) 
     55          add(#{severity}, message, progname, &block) 
     56        end 
     57        
     58        def #{severity.downcase}? 
     59          @level == #{severity} 
     60        end 
     61      EOT 
    5362    end 
    54     def warn(msg) 
    55       return if @level > WARN 
    56       msg << "\n" unless msg[-1] == ?\n 
    57       @buf << msg 
    58     end 
    59     def error(msg) 
    60       return if @level > ERROR 
    61       msg << "\n" unless msg[-1] == ?\n 
    62       @buf << msg 
    63     end 
    64     def fatal(msg) 
    65       return if @level > FATAL 
    66       msg << "\n" unless msg[-1] == ?\n 
    67       @buf << msg 
    68     end 
     63     
    6964  end 
    7065end