class Ramaze::Logger::Informer

A minimal logger for Ramaze, supports files, CLI, colors and some customization.

Constants

COLORS

Which tag should be in what color

Attributes

colorize[RW]
log_levels[RW]
out[RW]

Public Class Methods

new(out = $stdout, log_levels = [:debug, :error, :info, :warn]) click to toggle source

Create a new instance of Informer.

@example

Informer.new          # => logs to stdout with all levels being shown.
Informer.new($stderr) # => same, but to stderr

# same, but logs to the file foo.log (or creates it if it doesn't
# exist yet)
Informer.new("foo.log")

Informer.new($stdout, [:info]) #=> show only #info messages to stdout.

@param [String] out Specifies where the output should go. By default

this is set to STDOUT.

@param [Array] #log_levels Array containing the levels that should be

logged.
# File lib/ramaze/log/informer.rb, line 54
def initialize(out = $stdout, log_levels = [:debug, :error, :info, :warn])
  @colorize = false

  @out =
    case out
    when STDOUT, :stdout, 'stdout'
      $stdout
    when STDERR, :stderr, 'stderr'
      $stderr
    when IO
      out
    else
      if out.respond_to?(:puts)
        out
      else
        File.open(out.to_s, 'ab+')
      end
    end

  if @out.respond_to?(:tty?) and class_trait[:colorize]
    @colorize = @out.tty?
  end

  @log_levels = log_levels
end

Public Instance Methods

closed?() click to toggle source

Is @out closed?

# File lib/ramaze/log/informer.rb, line 144
def closed?
  @out.respond_to?(:closed?) and @out.closed?
end
log(tag, *messages) click to toggle source

Integration to Logging

@param [String] tag The log level for the current message(s). @param [Array] messages Array containing the data that should be logged.

# File lib/ramaze/log/informer.rb, line 96
def log tag, *messages
  return if closed? || !@log_levels.include?(tag)
  messages.flatten!

  prefix = tag.to_s.upcase.ljust(5)

  if @colorize
    color = COLORS[tag] ||= :white
    prefix.replace prefix.send(color)
  end

  messages.each do |message|
    @out.puts(log_interpolate(prefix, message))
  end

  @out.flush if @out.respond_to?(:flush)
end
log_interpolate(prefix, text, time = timestamp) click to toggle source

Takes the prefix (tag), text and timestamp and applies it to the :format trait.

@param [String] prefix @param [String] text @param [Integer] time

# File lib/ramaze/log/informer.rb, line 122
def log_interpolate prefix, text, time = timestamp
  message = class_trait[:format].dup

  vars = { '%time' => time, '%prefix' => prefix, '%text' => text }
  vars.each{|from, to| message.gsub!(from, to) }

  message
end
shutdown() click to toggle source

Close the file we log to if it isn't closed already.

# File lib/ramaze/log/informer.rb, line 83
def shutdown
  if @out.respond_to?(:close)
    Log.debug("close, #{@out.inspect}")
    @out.close
  end
end
timestamp() click to toggle source

This uses timestamp trait or a date in the format of

%Y-%m-%d %H:%M:%S
# => "2007-01-19 21:09:32"
# File lib/ramaze/log/informer.rb, line 136
def timestamp
  mask = class_trait[:timestamp]
  Time.now.strftime(mask || "%Y-%m-%d %H:%M:%S")
end