Class: Whisper::Logger

Inherits:
Object
  • Object
show all
Defined in:
lib/whisper/common.rb

Overview

quick replacement for Ruby’s crappy Logger class

Constant Summary collapse

LOG_LEVELS =
%w(debug info warn error fatal)

Class Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stream, level) ⇒ Logger

Returns a new instance of Logger.

Raises:

  • (ArgumentError)


165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/whisper/common.rb', line 165

def initialize stream, level
  level = level.to_s
  raise ArgumentError, "log level must be one of #{LOG_LEVELS.join ', '}" unless LOG_LEVELS.include? level

  @stream = stream
  @level = level
  @level_index = LOG_LEVELS.index(@level)

  LOG_LEVELS[0 ... @level_index].each do |m|
    self.class.instance_eval do
      define_method(m) { |s, where=nil| }
      define_method("#{m}?") { false }
      define_method("if_#{m}?") { |&b| }
    end
  end
  LOG_LEVELS[@level_index .. -1].each do |m|
    self.class.instance_eval do
      define_method(m) { |s, where=nil| send_message m, s, where }
      define_method("#{m}?") { true }
      define_method("if_#{m}?") { |&b| b.call }
    end
  end

  Logger.instance ||= self
end

Class Attribute Details

.instanceObject

Returns the value of attribute instance.



163
164
165
# File 'lib/whisper/common.rb', line 163

def instance
  @instance
end

Instance Method Details

#format_message(level, msg, where) ⇒ Object



197
198
199
200
# File 'lib/whisper/common.rb', line 197

def format_message level, msg, where
  where_s = where.nil? ? "" : "(#{where.sub("Whisper::", "")}) "
  "[#{Time.now}] #{where_s}#{level.upcase}: #{msg}\n"
end

#send_message(level, msg, where = nil) ⇒ Object



191
192
193
194
195
# File 'lib/whisper/common.rb', line 191

def send_message level, msg, where=nil
  m = format_message level, msg, where
  @stream.print m
  @stream.flush
end