/usr/lib/ruby/vendor_ruby/ramaze/log/informer.rb is in ruby-ramaze 2012.12.08-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | # Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
# All files in this distribution are subject to the terms of the MIT license.
module Ramaze
module Logger
##
# A minimal logger for Ramaze, supports files, CLI, colors and some
# customization.
#
class Informer
include Logging
include Innate::Traited
attr_accessor :out, :colorize, :log_levels
# Should Ramaze try to use colors?
trait :colorize => true
# parameter for Time.now.strftime
trait :timestamp => "%Y-%m-%d %H:%M:%S"
# This is how the final output is arranged.
trait :format => "[%time] %prefix %text"
# Which tag should be in what color
COLORS = {
:dev => :blue,
:debug => :yellow,
:info => :green,
:warn => :red,
:error => :red,
}
##
# 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.
#
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
##
# Close the file we log to if it isn't closed already.
#
def shutdown
if @out.respond_to?(:close)
Log.debug("close, #{@out.inspect}")
@out.close
end
end
##
# 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.
#
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
##
# Takes the prefix (tag), text and timestamp and applies it to
# the :format trait.
#
# @param [String] prefix
# @param [String] text
# @param [Integer] time
#
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
##
# This uses timestamp trait or a date in the format of
# %Y-%m-%d %H:%M:%S
# # => "2007-01-19 21:09:32"
#
def timestamp
mask = class_trait[:timestamp]
Time.now.strftime(mask || "%Y-%m-%d %H:%M:%S")
end
##
# Is @out closed?
#
def closed?
@out.respond_to?(:closed?) and @out.closed?
end
end # Informer
end # Log
end # Ramaze
|