Sha256: cd8ac048166bbd8bbcc67a18b1b137a9af7b2b073110e39fb630fe208ad9083e

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

module Merb

  class Logger
    module Severity
      DEBUG = 0
      INFO = 1
      WARN = 2
      ERROR = 3
      FATAL = 4
      UNKNOWN = 5
    end
    include Severity

    attr_accessor :level
    attr_reader :buffer
    
    def initialize(log, level = DEBUG)
      @level = level
      @buffer = []
      @aio = false
      if log.respond_to?(:write)
        @log = log
      elsif File.exist?(log)
        @log = open(log, (File::WRONLY | File::APPEND))
        @log.sync = true
      else
        @log = open(log, (File::WRONLY | File::APPEND | File::CREAT))
        @log.sync = true
        @log.write("# Logfile created on %s\n" % [Time.now.to_s])
      end
      if !MERB_ENV.match(/development|test/) && 
         !RUBY_PLATFORM.match(/java|mswin/) &&
         !(@log == STDOUT) &&
          @log.respond_to?(:write_nonblock)
        @aio = true
      end
    end
    
    def flush
      unless @buffer.size == 0
        if @aio
          @log.write_nonblock(@buffer.slice!(0..-1).to_s)
        else
          @log.write(@buffer.slice!(0..-1).to_s)
        end
      end
    end
    
    def close
      flush
      @log.close if @log.respond_to?(:close)
      @log = nil
    end

    def add(severity, message = nil, progname = nil, &block)
      return if @level > severity
      message = (message || (block && block.call) || progname).to_s
      # If a newline is necessary then create a new message ending with a newline.
      # Ensures that the original message is not mutated.
      message = "#{message}\n" unless message[-1] == ?\n
      @buffer << message
      message
    end
    
    Severity.constants.each do |severity|
      class_eval <<-EOT
        def #{severity.downcase}(message = nil, progname = nil, &block)
          add(#{severity}, message, progname, &block)
        end
       
        def #{severity.downcase}?
          #{severity} >= @level
        end
      EOT
    end
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
merb-0.4.2 lib/merb/logger.rb