riel 1.1.2 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/riel/ansicolor.rb +4 -6
- data/lib/riel/array.rb +1 -0
- data/lib/riel/asciitable/cell.rb +82 -0
- data/lib/riel/asciitable/column.rb +26 -0
- data/lib/riel/asciitable/row.rb +106 -0
- data/lib/riel/asciitable/table.rb +295 -0
- data/lib/riel/fdprocessor.rb +68 -0
- data/lib/riel/integer.rb +23 -0
- data/lib/riel/io.rb +22 -17
- data/lib/riel/log/log.rb +251 -0
- data/lib/riel/log/loggable.rb +103 -0
- data/lib/riel/log/logger.rb +297 -0
- data/lib/riel/log/severity.rb +22 -0
- data/lib/riel/log.rb +9 -473
- data/lib/riel/pathname.rb +5 -1
- data/lib/riel/rcfile.rb +1 -1
- data/lib/riel/string.rb +8 -8
- data/lib/riel/text.rb +57 -53
- data/lib/riel.rb +8 -4
- data/test/riel/integer_test.rb +44 -0
- data/test/riel/io_test.rb +2 -5
- data/test/riel/log_test.rb +30 -32
- metadata +68 -56
data/lib/riel/log/log.rb
ADDED
@@ -0,0 +1,251 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
#
|
4
|
+
# = log.rb
|
5
|
+
#
|
6
|
+
# Logging Module
|
7
|
+
#
|
8
|
+
# Author:: Jeff Pace <jpace@incava.org>
|
9
|
+
# Documentation:: Author
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'riel/ansicolor'
|
13
|
+
require 'riel/log/logger'
|
14
|
+
require 'riel/log/severity'
|
15
|
+
|
16
|
+
#
|
17
|
+
# == Log
|
18
|
+
#
|
19
|
+
# Very minimal logging output. If verbose is set, this displays the method and
|
20
|
+
# line number whence called. It can be a mixin to a class, which displays the
|
21
|
+
# class and method from where it called. If not in a class, it displays only the
|
22
|
+
# method.
|
23
|
+
#
|
24
|
+
# Remember: all kids love log.
|
25
|
+
#
|
26
|
+
# == Examples
|
27
|
+
#
|
28
|
+
# See the unit tests in log_test.rb
|
29
|
+
#
|
30
|
+
# == Usage
|
31
|
+
#
|
32
|
+
# The most general usage is simply to call:
|
33
|
+
#
|
34
|
+
# Log.log "some message"
|
35
|
+
#
|
36
|
+
# That will simply log the given message.
|
37
|
+
#
|
38
|
+
# class YourClass
|
39
|
+
# include Loggable
|
40
|
+
#
|
41
|
+
# def some_method(...)
|
42
|
+
# log "my message"
|
43
|
+
#
|
44
|
+
# That will log from the given class and method, showing the line number from
|
45
|
+
# which the logger was called.
|
46
|
+
#
|
47
|
+
# def another_method(...)
|
48
|
+
# stack "my message"
|
49
|
+
#
|
50
|
+
# That will produce a stack trace from the given location.
|
51
|
+
#
|
52
|
+
|
53
|
+
module RIEL
|
54
|
+
class Log
|
55
|
+
$LOGGING_LEVEL = nil
|
56
|
+
|
57
|
+
include Log::Severity
|
58
|
+
|
59
|
+
# by default, class methods delegate to a single app-wide log.
|
60
|
+
|
61
|
+
@@log = Logger.new
|
62
|
+
|
63
|
+
# Returns the logger of the log. A class method delegating to an instance
|
64
|
+
# method ... not so good. But temporary.
|
65
|
+
def self.logger
|
66
|
+
@@log
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.method_missing meth, *args, &blk
|
70
|
+
if code = ANSIColor::ATTRIBUTES[meth.to_s]
|
71
|
+
add_color_method meth.to_s, code
|
72
|
+
send meth, *args, &blk
|
73
|
+
else
|
74
|
+
super
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.add_color_method color, code
|
79
|
+
instmeth = Array.new
|
80
|
+
instmeth << "def #{color} msg = \"\", lvl = DEBUG, depth = 1, cname = nil, &blk"
|
81
|
+
instmeth << " log(\"\\e[#{code}m\#{msg\}\\e[0m\", lvl, depth + 1, cname, &blk)"
|
82
|
+
instmeth << "end"
|
83
|
+
instance_eval instmeth.join("\n")
|
84
|
+
|
85
|
+
clsmeth = Array.new
|
86
|
+
clsmeth << "def #{color} msg = \"\", lvl = DEBUG, depth = 1, cname = nil, &blk"
|
87
|
+
clsmeth << " logger.#{color}(\"\\e[#{code}m\#{msg\}\\e[0m\", lvl, depth + 1, cname, &blk)"
|
88
|
+
clsmeth << "end"
|
89
|
+
|
90
|
+
class_eval clsmeth.join("\n")
|
91
|
+
end
|
92
|
+
|
93
|
+
if false
|
94
|
+
ANSIColor::ATTRIBUTES.sort.each do |attr|
|
95
|
+
methname = attr[0]
|
96
|
+
|
97
|
+
instmeth = Array.new
|
98
|
+
instmeth << "def #{methname}(msg = \"\", lvl = DEBUG, depth = 1, cname = nil, &blk)"
|
99
|
+
instmeth << " log(\"\\e[#{attr[1]}m\#{msg\}\\e[0m\", lvl, depth + 1, cname, &blk)"
|
100
|
+
instmeth << "end"
|
101
|
+
instance_eval instmeth.join("\n")
|
102
|
+
|
103
|
+
clsmeth = Array.new
|
104
|
+
clsmeth << "def #{methname}(msg = \"\", lvl = DEBUG, depth = 1, cname = nil, &blk)"
|
105
|
+
clsmeth << " logger.#{methname}(\"\\e[#{attr[1]}m\#{msg\}\\e[0m\", lvl, depth + 1, cname, &blk)"
|
106
|
+
clsmeth << "end"
|
107
|
+
|
108
|
+
class_eval clsmeth.join("\n")
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def self.set_default_widths
|
113
|
+
logger.set_default_widths
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.verbose
|
117
|
+
logger.verbose
|
118
|
+
end
|
119
|
+
|
120
|
+
def self.verbose= v
|
121
|
+
logger.verbose = v && v != 0 ? DEBUG : FATAL
|
122
|
+
end
|
123
|
+
|
124
|
+
def self.level= lvl
|
125
|
+
logger.level = lvl
|
126
|
+
end
|
127
|
+
|
128
|
+
def self.quiet
|
129
|
+
logger.quiet
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.quiet= q
|
133
|
+
logger.quiet = q
|
134
|
+
end
|
135
|
+
|
136
|
+
def self.format
|
137
|
+
logger.format
|
138
|
+
end
|
139
|
+
|
140
|
+
def self.format= fmt
|
141
|
+
logger.format = fmt
|
142
|
+
end
|
143
|
+
|
144
|
+
# Assigns output to the given stream.
|
145
|
+
def self.output= io
|
146
|
+
logger.output = io
|
147
|
+
end
|
148
|
+
|
149
|
+
def self.output
|
150
|
+
logger.output
|
151
|
+
end
|
152
|
+
|
153
|
+
# sets whether to colorize the entire line, or just the message.
|
154
|
+
def self.colorize_line= col
|
155
|
+
logger.colorize_line = col
|
156
|
+
end
|
157
|
+
|
158
|
+
def self.colorize_line
|
159
|
+
logger.colorize_line
|
160
|
+
end
|
161
|
+
|
162
|
+
# Assigns output to a file with the given name. Returns the file; client
|
163
|
+
# is responsible for closing it.
|
164
|
+
def self.outfile= fname
|
165
|
+
logger.outfile = fname
|
166
|
+
end
|
167
|
+
|
168
|
+
def self.outfile
|
169
|
+
logger.outfile
|
170
|
+
end
|
171
|
+
|
172
|
+
# Creates a printf format for the given widths, for aligning output.
|
173
|
+
def self.set_widths file_width, line_width, func_width
|
174
|
+
logger.set_widths file_width, line_width, func_width
|
175
|
+
end
|
176
|
+
|
177
|
+
def self.ignore_file fname
|
178
|
+
logger.ignore_file fname
|
179
|
+
end
|
180
|
+
|
181
|
+
def self.ignore_method methname
|
182
|
+
logger.ignored_method methname
|
183
|
+
end
|
184
|
+
|
185
|
+
def self.ignore_class classname
|
186
|
+
logger.ignored_class classname
|
187
|
+
end
|
188
|
+
|
189
|
+
def self.log_file fname
|
190
|
+
logger.log_file fname
|
191
|
+
end
|
192
|
+
|
193
|
+
def self.log_method methname
|
194
|
+
logger.log_method methname
|
195
|
+
end
|
196
|
+
|
197
|
+
def self.log_class classname
|
198
|
+
logger.log_class classname
|
199
|
+
end
|
200
|
+
|
201
|
+
def self.debug msg = "", depth = 1, &blk
|
202
|
+
logger.log msg, DEBUG, depth + 1, &blk
|
203
|
+
end
|
204
|
+
|
205
|
+
def self.info msg = "", depth = 1, &blk
|
206
|
+
logger.log msg, INFO, depth + 1, &blk
|
207
|
+
end
|
208
|
+
|
209
|
+
def self.fatal msg = "", depth = 1, &blk
|
210
|
+
logger.log msg, FATAL, depth + 1, &blk
|
211
|
+
end
|
212
|
+
|
213
|
+
def self.log msg = "", lvl = DEBUG, depth = 1, cname = nil, &blk
|
214
|
+
logger.log msg, lvl, depth + 1, cname, &blk
|
215
|
+
end
|
216
|
+
|
217
|
+
def self.stack msg = "", lvl = DEBUG, depth = 1, cname = nil, &blk
|
218
|
+
logger.stack msg, lvl, depth + 1, cname, &blk
|
219
|
+
end
|
220
|
+
|
221
|
+
def self.warn msg = "", depth = 1, &blk
|
222
|
+
if verbose
|
223
|
+
logger.log msg, WARN, depth + 1, &blk
|
224
|
+
else
|
225
|
+
$stderr.puts "WARNING: " + msg
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
def self.error msg = "", depth = 1, &blk
|
230
|
+
if verbose
|
231
|
+
logger.log msg, ERROR, depth + 1, &blk
|
232
|
+
else
|
233
|
+
$stderr.puts "ERROR: " + msg
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
def self.write msg, depth = 1, cname = nil, &blk
|
238
|
+
if verbose
|
239
|
+
stack msg, Log::WARN, depth + 1, cname, &blk
|
240
|
+
elsif quiet
|
241
|
+
# nothing
|
242
|
+
else
|
243
|
+
$stderr.puts msg
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
def self.set_color lvl, color
|
248
|
+
logger.set_color lvl, color
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
#
|
4
|
+
# = log.rb
|
5
|
+
#
|
6
|
+
# Logging Module
|
7
|
+
#
|
8
|
+
# Author:: Jeff Pace <jpace@incava.org>
|
9
|
+
# Documentation:: Author
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'riel/log/log'
|
13
|
+
|
14
|
+
#
|
15
|
+
# == Loggable
|
16
|
+
#
|
17
|
+
# Including this module in a class gives access to the logger methods.
|
18
|
+
#
|
19
|
+
# == Examples
|
20
|
+
#
|
21
|
+
# See the unit tests in log_test.rb
|
22
|
+
#
|
23
|
+
# == Usage
|
24
|
+
#
|
25
|
+
# class YourClass
|
26
|
+
# include Loggable
|
27
|
+
#
|
28
|
+
# def some_method(...)
|
29
|
+
# log "my message"
|
30
|
+
#
|
31
|
+
# That will log from the given class and method, showing the line number from
|
32
|
+
# which the logger was called.
|
33
|
+
#
|
34
|
+
# def another_method(...)
|
35
|
+
# stack "my message"
|
36
|
+
#
|
37
|
+
# That will produce a stack trace from the given location.
|
38
|
+
#
|
39
|
+
|
40
|
+
module RIEL
|
41
|
+
module Loggable
|
42
|
+
# Logs the given message, including the class whence invoked.
|
43
|
+
def log msg = "", lvl = Log::DEBUG, depth = 1, &blk
|
44
|
+
Log.log msg, lvl, depth + 1, self.class.to_s, &blk
|
45
|
+
end
|
46
|
+
|
47
|
+
def debug msg = "", depth = 1, &blk
|
48
|
+
Log.log msg, Log::DEBUG, depth + 1, self.class.to_s, &blk
|
49
|
+
end
|
50
|
+
|
51
|
+
def info msg = "", depth = 1, &blk
|
52
|
+
Log.log msg, Log::INFO, depth + 1, self.class.to_s, &blk
|
53
|
+
end
|
54
|
+
|
55
|
+
def warn msg = "", depth = 1, &blk
|
56
|
+
Log.log msg, Log::WARN, depth + 1, self.class.to_s, &blk
|
57
|
+
end
|
58
|
+
|
59
|
+
def error msg = "", depth = 1, &blk
|
60
|
+
Log.log msg, Log::ERROR, depth + 1, self.class.to_s, &blk
|
61
|
+
end
|
62
|
+
|
63
|
+
def fatal msg = "", depth = 1, &blk
|
64
|
+
Log.log msg, Log::FATAL, depth + 1, self.class.to_s, &blk
|
65
|
+
end
|
66
|
+
|
67
|
+
def stack msg = "", lvl = Log::DEBUG, depth = 1, &blk
|
68
|
+
Log.stack msg, lvl, depth + 1, self.class.to_s, &blk
|
69
|
+
end
|
70
|
+
|
71
|
+
def write msg = "", depth = 1, &blk
|
72
|
+
Log.write msg, depth + 1, self.class.to_s, &blk
|
73
|
+
end
|
74
|
+
|
75
|
+
def method_missing meth, *args, &blk
|
76
|
+
if ANSIColor::ATTRIBUTES[meth.to_s]
|
77
|
+
add_color_method meth.to_s
|
78
|
+
send meth, *args, &blk
|
79
|
+
else
|
80
|
+
super
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def add_color_method color
|
85
|
+
meth = Array.new
|
86
|
+
meth << "def #{color} msg = \"\", lvl = Log::DEBUG, depth = 1, &blk"
|
87
|
+
meth << " Log.#{color} msg, lvl, depth + 1, self.class.to_s, &blk"
|
88
|
+
meth << "end"
|
89
|
+
self.class.module_eval meth.join("\n")
|
90
|
+
end
|
91
|
+
|
92
|
+
if false
|
93
|
+
ANSIColor::ATTRIBUTES.sort.each do |attr|
|
94
|
+
methname = attr[0]
|
95
|
+
meth = Array.new
|
96
|
+
meth << "def #{methname} msg = \"\", lvl = Log::DEBUG, depth = 1, &blk"
|
97
|
+
meth << " Log.#{methname} msg, lvl, depth + 1, self.class.to_s, &blk"
|
98
|
+
meth << "end"
|
99
|
+
module_eval meth.join("\n")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,297 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
#
|
4
|
+
# = logger.rb
|
5
|
+
#
|
6
|
+
# Logging Module
|
7
|
+
#
|
8
|
+
# Author:: Jeff Pace <jpace@incava.org>
|
9
|
+
# Documentation:: Author
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'riel/ansicolor'
|
13
|
+
require 'riel/log/severity'
|
14
|
+
|
15
|
+
#
|
16
|
+
# == Logger
|
17
|
+
#
|
18
|
+
# This class logs messages. You probably don't want to use this directly; Log is
|
19
|
+
# the class containing the necessary class methods.
|
20
|
+
#
|
21
|
+
# == Examples
|
22
|
+
#
|
23
|
+
# See the unit tests in log_test.rb
|
24
|
+
#
|
25
|
+
|
26
|
+
module RIEL
|
27
|
+
class Logger
|
28
|
+
$LOGGING_LEVEL = nil
|
29
|
+
|
30
|
+
attr_accessor :quiet
|
31
|
+
attr_accessor :output
|
32
|
+
attr_accessor :colorize_line
|
33
|
+
attr_accessor :level
|
34
|
+
attr_accessor :ignored_files
|
35
|
+
attr_accessor :ignored_methods
|
36
|
+
attr_accessor :ignored_classes
|
37
|
+
attr_accessor :trim
|
38
|
+
|
39
|
+
include Log::Severity
|
40
|
+
|
41
|
+
FRAME_RE = Regexp.new('(.*):(\d+)(?::in \`(.*)\')?')
|
42
|
+
|
43
|
+
def initialize
|
44
|
+
set_defaults
|
45
|
+
end
|
46
|
+
|
47
|
+
def verbose= v
|
48
|
+
@level = case v
|
49
|
+
when TrueClass
|
50
|
+
DEBUG
|
51
|
+
when FalseClass
|
52
|
+
FATAL
|
53
|
+
when Integer
|
54
|
+
v
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def set_defaults
|
59
|
+
$LOGGING_LEVEL = @level = FATAL
|
60
|
+
@ignored_files = Hash.new
|
61
|
+
@ignored_methods = Hash.new
|
62
|
+
@ignored_classes = Hash.new
|
63
|
+
@width = 0
|
64
|
+
@output = $stdout
|
65
|
+
@colors = Array.new
|
66
|
+
@colorize_line = false
|
67
|
+
@quiet = false
|
68
|
+
@trim = true
|
69
|
+
|
70
|
+
set_default_widths
|
71
|
+
end
|
72
|
+
|
73
|
+
def set_default_widths
|
74
|
+
set_widths(-25, 4, -20)
|
75
|
+
end
|
76
|
+
|
77
|
+
def verbose
|
78
|
+
level <= DEBUG
|
79
|
+
end
|
80
|
+
|
81
|
+
# Assigns output to a file with the given name. Returns the file; client
|
82
|
+
# is responsible for closing it.
|
83
|
+
def outfile= f
|
84
|
+
@output = f.kind_of?(IO) ? f : File.new(f, "w")
|
85
|
+
end
|
86
|
+
|
87
|
+
# Creates a printf format for the given widths, for aligning output. To lead
|
88
|
+
# lines with zeros (e.g., "00317") the line_width argument must be a string,
|
89
|
+
# not an integer.
|
90
|
+
def set_widths file_width, line_width, func_width
|
91
|
+
@file_width = file_width
|
92
|
+
@line_width = line_width
|
93
|
+
@function_width = func_width
|
94
|
+
|
95
|
+
@format = "[%#{file_width}s:%#{line_width}d] {%#{func_width}s}"
|
96
|
+
end
|
97
|
+
|
98
|
+
def ignore_file fname
|
99
|
+
ignored_files[fname] = true
|
100
|
+
end
|
101
|
+
|
102
|
+
def ignore_method methname
|
103
|
+
ignored_methods[methname] = true
|
104
|
+
end
|
105
|
+
|
106
|
+
def ignore_class classname
|
107
|
+
ignored_classes[classname] = true
|
108
|
+
end
|
109
|
+
|
110
|
+
def log_file fname
|
111
|
+
ignored_files.delete fname
|
112
|
+
end
|
113
|
+
|
114
|
+
def log_method methname
|
115
|
+
ignored_methods.delete methname
|
116
|
+
end
|
117
|
+
|
118
|
+
def log_class classname
|
119
|
+
ignored_classes.delete classname
|
120
|
+
end
|
121
|
+
|
122
|
+
def debug msg = "", depth = 1, &blk
|
123
|
+
log msg, DEBUG, depth + 1, &blk
|
124
|
+
end
|
125
|
+
|
126
|
+
def info msg = "", depth = 1, &blk
|
127
|
+
log msg, INFO, depth + 1, &blk
|
128
|
+
end
|
129
|
+
|
130
|
+
def warn msg = "", depth = 1, &blk
|
131
|
+
log msg, WARN, depth + 1, &blk
|
132
|
+
end
|
133
|
+
|
134
|
+
def error msg = "", depth = 1, &blk
|
135
|
+
log msg, ERROR, depth + 1, &blk
|
136
|
+
end
|
137
|
+
|
138
|
+
def fatal msg = "", depth = 1, &blk
|
139
|
+
log msg, FATAL, depth + 1, &blk
|
140
|
+
end
|
141
|
+
|
142
|
+
# Logs the given message.
|
143
|
+
def log msg = "", lvl = DEBUG, depth = 1, cname = nil, &blk
|
144
|
+
if lvl >= level
|
145
|
+
frame = nil
|
146
|
+
|
147
|
+
stk = caller 0
|
148
|
+
stk.reverse.each_with_index do |frm, idx|
|
149
|
+
if frm.index(%r{riel/log/log.*:\d+:in\b})
|
150
|
+
break
|
151
|
+
else
|
152
|
+
frame = frm
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
print_stack_frame frame, cname, msg, lvl, &blk
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
# Shows the current stack.
|
161
|
+
def stack msg = "", lvl = DEBUG, depth = 1, cname = nil, &blk
|
162
|
+
if lvl >= level
|
163
|
+
stk = caller depth
|
164
|
+
for frame in stk
|
165
|
+
print_stack_frame frame, cname, msg, lvl, &blk
|
166
|
+
msg = ""
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def print_stack_frame frame, cname, msg, lvl, &blk
|
172
|
+
md = FRAME_RE.match frame
|
173
|
+
file, line, func = md[1], md[2], (md[3] || "")
|
174
|
+
# file.sub!(/.*\//, "")
|
175
|
+
|
176
|
+
if cname
|
177
|
+
func = cname + "#" + func
|
178
|
+
end
|
179
|
+
|
180
|
+
if ignored_files[file] || (cname && ignored_classes[cname]) || ignored_methods[func]
|
181
|
+
# skip this one.
|
182
|
+
else
|
183
|
+
print_formatted(file, line, func, msg, lvl, &blk)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def trim_left str, maxlen
|
188
|
+
str[0 ... maxlen.to_i.abs]
|
189
|
+
end
|
190
|
+
|
191
|
+
def trim_right str, maxlen
|
192
|
+
mxln = maxlen.abs
|
193
|
+
|
194
|
+
# magic number 3 for the ellipses ...
|
195
|
+
|
196
|
+
if str.length > mxln
|
197
|
+
path = str.split('/')
|
198
|
+
newstr = "..."
|
199
|
+
path.reverse.each do |element|
|
200
|
+
if newstr.length + element.length > mxln
|
201
|
+
while newstr.length < mxln
|
202
|
+
newstr.insert 0, " "
|
203
|
+
end
|
204
|
+
return newstr
|
205
|
+
else
|
206
|
+
if newstr.length > 3
|
207
|
+
newstr.insert 3, "/"
|
208
|
+
end
|
209
|
+
newstr.insert 3, element
|
210
|
+
end
|
211
|
+
end
|
212
|
+
newstr
|
213
|
+
else
|
214
|
+
str
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
def print_formatted file, line, func, msg, lvl, &blk
|
219
|
+
if trim
|
220
|
+
file = trim_right file, @file_width
|
221
|
+
line = trim_left line, @line_width
|
222
|
+
func = trim_left func, @function_width
|
223
|
+
end
|
224
|
+
|
225
|
+
hdr = sprintf @format, file, line, func
|
226
|
+
print hdr, msg, lvl, &blk
|
227
|
+
end
|
228
|
+
|
229
|
+
def print hdr, msg, lvl, &blk
|
230
|
+
if blk
|
231
|
+
x = blk.call
|
232
|
+
if x.kind_of? String
|
233
|
+
msg = x
|
234
|
+
else
|
235
|
+
return
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
if @colors[lvl]
|
240
|
+
if colorize_line
|
241
|
+
@output.puts @colors[lvl] + hdr + " " + msg.to_s.chomp + ANSIColor.reset
|
242
|
+
else
|
243
|
+
@output.puts hdr + " " + @colors[lvl] + msg.to_s.chomp + ANSIColor.reset
|
244
|
+
end
|
245
|
+
else
|
246
|
+
@output.puts hdr + " " + msg.to_s.chomp
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
def set_color lvl, color
|
251
|
+
@colors[lvl] = ANSIColor::code color
|
252
|
+
end
|
253
|
+
|
254
|
+
def self.method_missing(meth, *args, &blk)
|
255
|
+
if code = ANSIColor::ATTRIBUTES[meth.to_s]
|
256
|
+
add_color_method meth.to_s, code
|
257
|
+
send meth, *args, &blk
|
258
|
+
else
|
259
|
+
super
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
def self.add_color_method color, code
|
264
|
+
instmeth = Array.new
|
265
|
+
instmeth << "def #{color}(msg = \"\", lvl = DEBUG, depth = 1, cname = nil, &blk)"
|
266
|
+
instmeth << " log(\"\\e[#{code}m\#{msg\}\\e[0m\", lvl, depth + 1, cname, &blk)"
|
267
|
+
instmeth << "end"
|
268
|
+
instance_eval instmeth.join("\n")
|
269
|
+
|
270
|
+
clsmeth = Array.new
|
271
|
+
clsmeth << "def #{color}(msg = \"\", lvl = DEBUG, depth = 1, cname = nil, &blk)"
|
272
|
+
clsmeth << " logger.#{color}(\"\\e[#{code}m\#{msg\}\\e[0m\", lvl, depth + 1, cname, &blk)"
|
273
|
+
clsmeth << "end"
|
274
|
+
|
275
|
+
class_eval clsmeth.join("\n")
|
276
|
+
end
|
277
|
+
|
278
|
+
if false
|
279
|
+
ANSIColor::ATTRIBUTES.sort.each do |attr|
|
280
|
+
methname = attr[0]
|
281
|
+
|
282
|
+
instmeth = Array.new
|
283
|
+
instmeth << "def #{methname}(msg = \"\", lvl = DEBUG, depth = 1, cname = nil, &blk)"
|
284
|
+
instmeth << " log(\"\\e[#{attr[1]}m\#{msg\}\\e[0m\", lvl, depth + 1, cname, &blk)"
|
285
|
+
instmeth << "end"
|
286
|
+
instance_eval instmeth.join("\n")
|
287
|
+
|
288
|
+
clsmeth = Array.new
|
289
|
+
clsmeth << "def #{methname}(msg = \"\", lvl = DEBUG, depth = 1, cname = nil, &blk)"
|
290
|
+
clsmeth << " logger.#{methname}(\"\\e[#{attr[1]}m\#{msg\}\\e[0m\", lvl, depth + 1, cname, &blk)"
|
291
|
+
clsmeth << "end"
|
292
|
+
|
293
|
+
class_eval clsmeth.join("\n")
|
294
|
+
end
|
295
|
+
end
|
296
|
+
end
|
297
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
#
|
4
|
+
# = severity.rb
|
5
|
+
#
|
6
|
+
# Logging Module
|
7
|
+
#
|
8
|
+
# Author:: Jeff Pace <jpace@incava.org>
|
9
|
+
# Documentation:: Author
|
10
|
+
#
|
11
|
+
|
12
|
+
module RIEL
|
13
|
+
class Log
|
14
|
+
module Severity
|
15
|
+
DEBUG = 0
|
16
|
+
INFO = 1
|
17
|
+
WARN = 2
|
18
|
+
ERROR = 3
|
19
|
+
FATAL = 4
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|