File: webrick/log.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: WEBrick#11
  class: BasicLog#12
inherits from
  Object ( Builtin-Module )
has properties
constant: DEBUG #14
attribute: level [RW] #16
method: initialize / 2 #18
method: close #32
method: log / 2 #37
method: << / 1 #44
method: fatal / 1 #48
method: error / 1 #49
method: warn / 1 #50
method: info / 1 #51
method: debug / 1 #52
method: fatal? #54
method: error? #55
method: warn? #56
method: info? #57
method: debug? #58
method: format / 1 #62
  class: Log#74
inherits from
  BasicLog ( WEBrick )
has properties
attribute: time_format [RW] #75
method: initialize / 2 #77
method: log / 2 #82

Class Hierarchy

Object ( Builtin-Module )
BasicLog ( WEBrick ) — #12
  Log    #74

Code

   1  #
   2  # log.rb -- Log Class
   3  #
   4  # Author: IPR -- Internet Programming with Ruby -- writers
   5  # Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
   6  # Copyright (c) 2002 Internet Programming with Ruby writers. All rights
   7  # reserved.
   8  #
   9  # $IPR: log.rb,v 1.26 2002/10/06 17:06:10 gotoyuzo Exp $
  10 
  11  module WEBrick
  12    class BasicLog
  13      # log-level constant
  14      FATAL, ERROR, WARN, INFO, DEBUG = 1, 2, 3, 4, 5
  15 
  16      attr_accessor :level
  17 
  18      def initialize(log_file=nil, level=nil)
  19        @level = level || INFO
  20        case log_file
  21        when String
  22          @log = open(log_file, "a+")
  23          @log.sync = true
  24          @opened = true
  25        when NilClass
  26          @log = $stderr
  27        else
  28          @log = log_file  # requires "<<". (see BasicLog#log)
  29        end
  30      end
  31 
  32      def close
  33        @log.close if @opened
  34        @log = nil
  35      end
  36 
  37      def log(level, data)
  38        if @log && level <= @level
  39          data += "\n" if /\n\Z/ !~ data
  40          @log << data
  41        end
  42      end
  43 
  44      def <<(obj)
  45        log(INFO, obj.to_s)
  46      end
  47 
  48      def fatal(msg) log(FATAL, "FATAL " << format(msg)); end
  49      def error(msg) log(ERROR, "ERROR " << format(msg)); end
  50      def warn(msg)  log(WARN,  "WARN  " << format(msg)); end
  51      def info(msg)  log(INFO,  "INFO  " << format(msg)); end
  52      def debug(msg) log(DEBUG, "DEBUG " << format(msg)); end
  53 
  54      def fatal?; @level >= FATAL; end
  55      def error?; @level >= ERROR; end
  56      def warn?;  @level >= WARN; end
  57      def info?;  @level >= INFO; end
  58      def debug?; @level >= DEBUG; end
  59 
  60      private
  61 
  62      def format(arg)
  63        str = if arg.is_a?(Exception)
  64          "#{arg.class}: #{arg.message}\n\t" <<
  65          arg.backtrace.join("\n\t") << "\n"
  66        elsif arg.respond_to?(:to_str)
  67          arg.to_str
  68        else
  69          arg.inspect
  70        end
  71      end
  72    end
  73 
  74    class Log < BasicLog
  75      attr_accessor :time_format 
  76 
  77      def initialize(log_file=nil, level=nil)
  78        super(log_file, level)
  79        @time_format = "[%Y-%m-%d %H:%M:%S]"
  80      end
  81 
  82      def log(level, data)
  83        tmp = Time.now.strftime(@time_format)
  84        tmp << " " << data
  85        super(level, tmp)
  86      end
  87    end
  88  end