Class: Ramaze::Logger::Informer

Inherits:
Object
  • Object
show all
Includes:
Innate::Traited, Ramaze::Logging
Defined in:
lib/ramaze/log/informer.rb

Overview

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

Since:

  • 11-08-2009

Constant Summary collapse

COLORS =

Which tag should be in what color

Since:

  • 11-08-2009

{
  :dev   => :blue,
  :debug => :yellow,
  :info  => :green,
  :warn  => :red,
  :error => :red,
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Ramaze::Logging

#debug, #debug?, #dev, #error, #info, #tag_log, #warn

Constructor Details

#initialize(out = $stdout, log_levels = [:debug, :error, :info, :warn]) ⇒ Informer

Create a new instance of Informer.

Examples:


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.

Parameters:

  • out (String) (defaults to: $stdout)

    Specifies where the output should go. By default this is set to STDOUT.

  • log_levels (Array) (defaults to: [:debug, :error, :info, :warn])

    Array containing the levels that should be logged.

Since:

  • 11-08-2009



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 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

Instance Attribute Details

#colorizeObject

Since:

  • 11-08-2009



15
16
17
# File 'lib/ramaze/log/informer.rb', line 15

def colorize
  @colorize
end

#log_levelsObject

Since:

  • 11-08-2009



15
16
17
# File 'lib/ramaze/log/informer.rb', line 15

def log_levels
  @log_levels
end

#outObject

Since:

  • 11-08-2009



15
16
17
# File 'lib/ramaze/log/informer.rb', line 15

def out
  @out
end

Instance Method Details

#closed?Boolean

Is @out closed?

Returns:

  • (Boolean)

Since:

  • 11-08-2009



144
145
146
# File 'lib/ramaze/log/informer.rb', line 144

def closed?
  @out.respond_to?(:closed?) and @out.closed?
end

#log(tag, *messages) ⇒ Object

Integration to Logging

Parameters:

  • tag (String)

    The log level for the current message(s).

  • messages (Array)

    Array containing the data that should be logged.

Since:

  • 11-08-2009



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# 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) ⇒ Object

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

Parameters:

  • prefix (String)
  • text (String)
  • time (Integer) (defaults to: timestamp)

Since:

  • 11-08-2009



122
123
124
125
126
127
128
129
# 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

#shutdownObject

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

Since:

  • 11-08-2009



83
84
85
86
87
88
# File 'lib/ramaze/log/informer.rb', line 83

def shutdown
  if @out.respond_to?(:close)
    Log.debug("close, #{@out.inspect}")
    @out.close
  end
end

#timestampObject

This uses timestamp trait or a date in the format of

%Y-%m-%d %H:%M:%S
# => "2007-01-19 21:09:32"

Since:

  • 11-08-2009



136
137
138
139
# 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