logue 1.0.11 → 1.0.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +2 -3
- data/lib/logue/colorlog.rb +54 -0
- data/lib/logue/filter.rb +60 -0
- data/lib/logue/frame.rb +19 -10
- data/lib/logue/legacy_logger.rb +69 -0
- data/lib/logue/level.rb +20 -0
- data/lib/logue/line.rb +12 -13
- data/lib/logue/location.rb +15 -16
- data/lib/logue/location_format.rb +36 -35
- data/lib/logue/log.rb +20 -20
- data/lib/logue/loggable.rb +18 -18
- data/lib/logue/logger.rb +93 -200
- data/lib/logue/pathutil.rb +29 -30
- data/lib/logue/severity.rb +5 -6
- data/lib/logue/stack.rb +24 -0
- data/lib/logue/version.rb +1 -1
- data/lib/logue/writer.rb +44 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27c5cf726353cfb91ce2c443c8cd02f5a8c0e272
|
4
|
+
data.tar.gz: 02125714a6032756c58acff5522fe104748bd270
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43947a643388fa154feb99be7c02a3a33dcc701e75e256738f97911bdd982ecb23a236922e8db4bd4693b43eb46a28b56e14313221da001bbeb95b79da67d4a5
|
7
|
+
data.tar.gz: f3aa71bcd285189271ec1a5d48463c79c247d2b57ee58fece9ae4f483ae9f7f69621e103ef5f803d639a7678f3014179d82038067f78649d7cecc89b11799636
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
logue
|
2
2
|
=====
|
3
3
|
|
4
|
-
A Ruby gem for generating logging and debugging output. Logging statements
|
5
|
-
|
6
|
-
called.
|
4
|
+
A Ruby gem for generating logging and debugging output. Logging statements include the file, line,
|
5
|
+
class and method from which the logging method was called.
|
7
6
|
|
8
7
|
## EXAMPLES
|
9
8
|
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
#
|
4
|
+
# = colorlog.rb
|
5
|
+
#
|
6
|
+
# Logging Module
|
7
|
+
#
|
8
|
+
# Author:: Jeff Pace <jeugenepace@gmail.com>
|
9
|
+
# Documentation:: Author
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'rainbow/x11_color_names'
|
13
|
+
require 'rainbow/color'
|
14
|
+
require 'logue/level'
|
15
|
+
|
16
|
+
#
|
17
|
+
# == ColorLog
|
18
|
+
#
|
19
|
+
# This class logs messages using terminal colors, forwarding them to a log method.
|
20
|
+
#
|
21
|
+
# == Examples
|
22
|
+
#
|
23
|
+
# See the unit tests in colorlog_test.rb
|
24
|
+
#
|
25
|
+
|
26
|
+
module Logue
|
27
|
+
module ColorLog
|
28
|
+
def method_missing meth, *args, &blk
|
29
|
+
# validcolors = Rainbow::X11ColorNames::NAMES
|
30
|
+
validcolors = Rainbow::Color::Named::NAMES
|
31
|
+
if code = validcolors[meth]
|
32
|
+
add_color_method meth.to_s, code + 30
|
33
|
+
send meth, *args, &blk
|
34
|
+
else
|
35
|
+
super
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def respond_to? meth
|
40
|
+
# validcolors = Rainbow::X11ColorNames::NAMES
|
41
|
+
validcolors = Rainbow::Color::Named::NAMES
|
42
|
+
validcolors.include?(meth) || super
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_color_method color, code
|
46
|
+
instmeth = Array.new.tap do |a|
|
47
|
+
a << 'def ' + color.to_s + '(msg = "", lvl = Logue::Level::DEBUG, cname = nil, &blk)'
|
48
|
+
a << ' log("\e[' + code.to_s + 'm#{msg}\e[0m", lvl, cname, &blk)'
|
49
|
+
a << 'end'
|
50
|
+
end
|
51
|
+
instance_eval instmeth.join "\n"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/logue/filter.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'pathname'
|
5
|
+
|
6
|
+
module Logue
|
7
|
+
class Filter
|
8
|
+
include Comparable
|
9
|
+
|
10
|
+
attr_reader :ignored_files
|
11
|
+
attr_reader :ignored_methods
|
12
|
+
attr_reader :ignored_classes
|
13
|
+
|
14
|
+
def initialize ignored_files: Array.new, ignored_methods: Array.new, ignored_classes: Array.new
|
15
|
+
@ignored_files = ignored_files
|
16
|
+
@ignored_methods = ignored_methods
|
17
|
+
@ignored_classes = ignored_classes
|
18
|
+
end
|
19
|
+
|
20
|
+
def ignore_file file
|
21
|
+
@ignored_files << file
|
22
|
+
end
|
23
|
+
|
24
|
+
def log_file file
|
25
|
+
@ignored_files.delete file
|
26
|
+
end
|
27
|
+
|
28
|
+
def ignore_class cls
|
29
|
+
@ignored_classes << cls
|
30
|
+
end
|
31
|
+
|
32
|
+
def log_class cls
|
33
|
+
@ignored_classes.delete cls
|
34
|
+
end
|
35
|
+
|
36
|
+
def ignore_method meth
|
37
|
+
@ignored_methods << meth
|
38
|
+
end
|
39
|
+
|
40
|
+
def log_method meth
|
41
|
+
@ignored_methods.delete meth
|
42
|
+
end
|
43
|
+
|
44
|
+
def log? file, cls, meth
|
45
|
+
!@ignored_files.include?(file) && !@ignored_classes.include?(cls) && !@ignored_methods.include?(meth)
|
46
|
+
end
|
47
|
+
|
48
|
+
def compare_fields
|
49
|
+
[ :ignored_files, :ignored_methods, :ignored_classes ]
|
50
|
+
end
|
51
|
+
|
52
|
+
def <=> other
|
53
|
+
compare_fields.each do |field|
|
54
|
+
cmp = send(field) <=> other.send(field)
|
55
|
+
return cmp if cmp.nonzero?
|
56
|
+
end
|
57
|
+
0
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/logue/frame.rb
CHANGED
@@ -9,20 +9,29 @@ module Logue
|
|
9
9
|
|
10
10
|
attr_reader :path
|
11
11
|
attr_reader :line
|
12
|
-
attr_reader :
|
12
|
+
attr_reader :method
|
13
13
|
|
14
|
-
def initialize
|
15
|
-
|
14
|
+
def initialize entry: nil, path: nil, line: nil, method: nil
|
15
|
+
# entry if called from "caller(x)" elements, path/line/method if called from
|
16
|
+
# "caller_location(x)" elements.
|
17
|
+
if entry
|
16
18
|
md = FRAME_RE.match entry
|
17
|
-
|
18
|
-
@
|
19
|
-
@
|
20
|
-
@function = md[3] || ""
|
19
|
+
@path = md[1]
|
20
|
+
@line = md[2].to_i
|
21
|
+
@method = md[3] || ""
|
21
22
|
else
|
22
|
-
@path
|
23
|
-
@line
|
24
|
-
@
|
23
|
+
@path = path
|
24
|
+
@line = line
|
25
|
+
@method = method
|
25
26
|
end
|
26
27
|
end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
[ :path, :line, :method ].collect { |field| "#{field}: " + send(field).to_s }.join ", "
|
31
|
+
end
|
32
|
+
|
33
|
+
def formatted format, cname
|
34
|
+
format.format @path, @line, cname, @method
|
35
|
+
end
|
27
36
|
end
|
28
37
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
#
|
4
|
+
# = legacy_logger.rb
|
5
|
+
#
|
6
|
+
# Logging Module
|
7
|
+
#
|
8
|
+
# Author:: Jeff Pace <jeugenepace@gmail.com>
|
9
|
+
# Documentation:: Author
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'logue/filter'
|
13
|
+
require 'logue/location_format'
|
14
|
+
|
15
|
+
module Logue
|
16
|
+
module LegacyLogger
|
17
|
+
def trim= what
|
18
|
+
$stderr.puts "Logger#trim is deprecated, and ignored"
|
19
|
+
end
|
20
|
+
|
21
|
+
def ignore_file fname
|
22
|
+
filter.ignore_file fname
|
23
|
+
end
|
24
|
+
|
25
|
+
def ignore_method methname
|
26
|
+
filter.ignore_method methname
|
27
|
+
end
|
28
|
+
|
29
|
+
def ignore_class classname
|
30
|
+
filter.ignore_class classname
|
31
|
+
end
|
32
|
+
|
33
|
+
def log_file fname
|
34
|
+
filter.log_file fname
|
35
|
+
end
|
36
|
+
|
37
|
+
def log_method methname
|
38
|
+
filter.log_method methname
|
39
|
+
end
|
40
|
+
|
41
|
+
def log_class classname
|
42
|
+
filter.log_class classname
|
43
|
+
end
|
44
|
+
|
45
|
+
def output
|
46
|
+
writer.output
|
47
|
+
end
|
48
|
+
|
49
|
+
def output= obj
|
50
|
+
writer.output = obj
|
51
|
+
end
|
52
|
+
|
53
|
+
def colorize_line
|
54
|
+
writer.colorize_line
|
55
|
+
end
|
56
|
+
|
57
|
+
def colorize_line= b
|
58
|
+
writer.colorize_line = b
|
59
|
+
end
|
60
|
+
|
61
|
+
def set_default_widths
|
62
|
+
self.format = LocationFormat.new
|
63
|
+
end
|
64
|
+
|
65
|
+
def set_color lvl, color
|
66
|
+
writer.colors[lvl] = color
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/logue/level.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
#
|
4
|
+
# = severity.rb
|
5
|
+
#
|
6
|
+
# Logging Module
|
7
|
+
#
|
8
|
+
# Author:: Jeff Pace <jeugenepace@gmail.com>
|
9
|
+
# Documentation:: Author
|
10
|
+
#
|
11
|
+
|
12
|
+
module Logue
|
13
|
+
module Level
|
14
|
+
DEBUG = 0
|
15
|
+
INFO = 1
|
16
|
+
WARN = 2
|
17
|
+
ERROR = 3
|
18
|
+
FATAL = 4
|
19
|
+
end
|
20
|
+
end
|
data/lib/logue/line.rb
CHANGED
@@ -4,19 +4,18 @@
|
|
4
4
|
require 'logue/location_format'
|
5
5
|
|
6
6
|
module Logue
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
@msg = msg
|
16
|
-
end
|
7
|
+
class Line
|
8
|
+
attr_reader :location
|
9
|
+
attr_reader :msg
|
10
|
+
|
11
|
+
def initialize location, msg
|
12
|
+
@location = location
|
13
|
+
@msg = msg
|
14
|
+
end
|
17
15
|
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
def format locformat
|
17
|
+
logmsg = @location.format locformat
|
18
|
+
logmsg + " " + @msg
|
19
|
+
end
|
21
20
|
end
|
22
21
|
end
|
data/lib/logue/location.rb
CHANGED
@@ -4,22 +4,21 @@
|
|
4
4
|
require 'logue/location_format'
|
5
5
|
|
6
6
|
module Logue
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
@function = function
|
20
|
-
end
|
7
|
+
class Location
|
8
|
+
attr_reader :path
|
9
|
+
attr_reader :lineno
|
10
|
+
attr_reader :cls
|
11
|
+
attr_reader :method
|
12
|
+
|
13
|
+
def initialize path, lineno, cls, method
|
14
|
+
@path = path
|
15
|
+
@lineno = lineno
|
16
|
+
@cls = cls
|
17
|
+
@method = method
|
18
|
+
end
|
21
19
|
|
22
|
-
|
23
|
-
|
20
|
+
def format locformat
|
21
|
+
locformat.format @path, @lineno, @cls, @method
|
22
|
+
end
|
24
23
|
end
|
25
24
|
end
|
@@ -3,45 +3,46 @@
|
|
3
3
|
|
4
4
|
require 'logue/pathutil'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
class Logue::LocationFormat
|
13
|
-
attr_accessor :file
|
14
|
-
attr_accessor :line
|
15
|
-
attr_accessor :function
|
16
|
-
attr_accessor :trim
|
17
|
-
|
18
|
-
def initialize args = Hash.new
|
19
|
-
@file = args.fetch :file, Logue::LocationFormatWidths::DEFAULT_FILENAME
|
20
|
-
@line = args.fetch :line, Logue::LocationFormatWidths::DEFAULT_LINE
|
21
|
-
@function = args.fetch :function, Logue::LocationFormatWidths::DEFAULT_FUNCTION
|
22
|
-
@trim = args.fetch :trim, true
|
23
|
-
end
|
24
|
-
|
25
|
-
def copy args
|
26
|
-
values = { file: @file, line: @line, function: @function, trim: @trim }
|
27
|
-
self.class.new values.merge(args)
|
28
|
-
end
|
29
|
-
|
30
|
-
def format path, line, cls, func
|
31
|
-
if cls
|
32
|
-
func = cls.to_s + "#" + func
|
6
|
+
module Logue
|
7
|
+
class LocationFormat
|
8
|
+
module Defaults
|
9
|
+
FILENAME = -25
|
10
|
+
LINE = 4
|
11
|
+
METHOD = -20
|
33
12
|
end
|
34
13
|
|
35
|
-
|
36
|
-
|
37
|
-
|
14
|
+
attr_accessor :file
|
15
|
+
attr_accessor :line
|
16
|
+
attr_accessor :method
|
17
|
+
attr_accessor :trim
|
18
|
+
|
19
|
+
def initialize file: Defaults::FILENAME, line: Defaults::LINE, method: Defaults::METHOD, trim: true
|
20
|
+
@file = file
|
21
|
+
@line = line
|
22
|
+
@method = method
|
23
|
+
@trim = trim
|
24
|
+
end
|
25
|
+
|
26
|
+
def copy args
|
27
|
+
values = { file: @file, line: @line, method: @method, trim: @trim }
|
28
|
+
self.class.new values.merge(args)
|
38
29
|
end
|
39
30
|
|
40
|
-
format
|
41
|
-
|
42
|
-
|
31
|
+
def format path, line, cls, func
|
32
|
+
if cls
|
33
|
+
func = cls.to_s + "#" + func
|
34
|
+
end
|
35
|
+
|
36
|
+
if trim
|
37
|
+
path = PathUtil.trim_right path.to_s, @file
|
38
|
+
func = PathUtil.trim_left func, @method
|
39
|
+
end
|
40
|
+
|
41
|
+
sprintf format_string, path, line, func
|
42
|
+
end
|
43
43
|
|
44
|
-
|
45
|
-
|
44
|
+
def format_string
|
45
|
+
"[%#{@file}s:%#{@line}d] {%#{@method}s}"
|
46
|
+
end
|
46
47
|
end
|
47
48
|
end
|
data/lib/logue/log.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
|
12
12
|
require 'logue/logger'
|
13
|
-
require 'logue/
|
13
|
+
require 'logue/level'
|
14
14
|
require 'logue/colors'
|
15
15
|
|
16
16
|
#
|
@@ -54,7 +54,7 @@ module Logue
|
|
54
54
|
class Log
|
55
55
|
$LOGGING_LEVEL = nil
|
56
56
|
|
57
|
-
include
|
57
|
+
include Level
|
58
58
|
|
59
59
|
# by default, class methods delegate to a single app-wide log.
|
60
60
|
|
@@ -115,8 +115,8 @@ module Logue
|
|
115
115
|
|
116
116
|
def self.add_color_method color, code
|
117
117
|
instmeth = Array.new
|
118
|
-
instmeth << "def #{color} msg = \"\", lvl = Log::DEBUG,
|
119
|
-
instmeth << " logger.#{color} (\"\\e[#{code}m\#{msg\}\\e[0m\", lvl,
|
118
|
+
instmeth << "def #{color} msg = \"\", lvl = Log::DEBUG, cname = nil, &blk"
|
119
|
+
instmeth << " logger.#{color} (\"\\e[#{code}m\#{msg\}\\e[0m\", lvl, cname, &blk)"
|
120
120
|
instmeth << "end"
|
121
121
|
|
122
122
|
# an instance, but on the class object, not the log instance:
|
@@ -128,45 +128,45 @@ module Logue
|
|
128
128
|
logger.set_widths file_width, line_width, func_width
|
129
129
|
end
|
130
130
|
|
131
|
-
def self.debug msg = "",
|
132
|
-
logger.debug msg,
|
131
|
+
def self.debug msg = "", cname = nil, &blk
|
132
|
+
logger.debug msg, cname, &blk
|
133
133
|
end
|
134
134
|
|
135
|
-
def self.info msg = "",
|
136
|
-
logger.info msg,
|
135
|
+
def self.info msg = "", cname = nil, &blk
|
136
|
+
logger.info msg, cname, &blk
|
137
137
|
end
|
138
138
|
|
139
|
-
def self.fatal msg = "",
|
140
|
-
logger.fatal msg,
|
139
|
+
def self.fatal msg = "", cname = nil, &blk
|
140
|
+
logger.fatal msg, cname, &blk
|
141
141
|
end
|
142
142
|
|
143
|
-
def self.log msg = "", lvl = DEBUG,
|
144
|
-
logger.log msg, lvl,
|
143
|
+
def self.log msg = "", lvl = DEBUG, cname = nil, &blk
|
144
|
+
logger.log msg, lvl, cname, &blk
|
145
145
|
end
|
146
146
|
|
147
|
-
def self.stack msg = "", lvl = DEBUG,
|
148
|
-
logger.stack msg, lvl,
|
147
|
+
def self.stack msg = "", lvl = DEBUG, cname = nil, &blk
|
148
|
+
logger.stack msg, lvl, cname, &blk
|
149
149
|
end
|
150
150
|
|
151
|
-
def self.warn msg = "",
|
151
|
+
def self.warn msg = "", cname = nil, &blk
|
152
152
|
if verbose
|
153
|
-
logger.log msg, WARN,
|
153
|
+
logger.log msg, WARN, cname, &blk
|
154
154
|
else
|
155
155
|
$stderr.puts "WARNING: " + msg
|
156
156
|
end
|
157
157
|
end
|
158
158
|
|
159
|
-
def self.error msg = "",
|
159
|
+
def self.error msg = "", cname = nil, &blk
|
160
160
|
if verbose
|
161
|
-
logger.log msg, ERROR,
|
161
|
+
logger.log msg, ERROR, cname, &blk
|
162
162
|
else
|
163
163
|
$stderr.puts "ERROR: " + msg
|
164
164
|
end
|
165
165
|
end
|
166
166
|
|
167
|
-
def self.write msg,
|
167
|
+
def self.write msg, cname = nil, &blk
|
168
168
|
if verbose
|
169
|
-
stack msg, Log::WARN,
|
169
|
+
stack msg, Log::WARN, cname, &blk
|
170
170
|
elsif quiet
|
171
171
|
# nothing
|
172
172
|
else
|
data/lib/logue/loggable.rb
CHANGED
@@ -41,36 +41,36 @@ require 'logue/colors'
|
|
41
41
|
module Logue
|
42
42
|
module Loggable
|
43
43
|
# Logs the given message, including the class whence invoked.
|
44
|
-
def log msg = "", lvl = Log::DEBUG,
|
45
|
-
delegate_log_class.log msg, lvl,
|
44
|
+
def log msg = "", lvl = Log::DEBUG, &blk
|
45
|
+
delegate_log_class.log msg, lvl, self.class.to_s, &blk
|
46
46
|
end
|
47
47
|
|
48
|
-
def debug msg = "",
|
49
|
-
delegate_log_class.debug msg,
|
48
|
+
def debug msg = "", &blk
|
49
|
+
delegate_log_class.debug msg, self.class.to_s, &blk
|
50
50
|
end
|
51
51
|
|
52
|
-
def info msg = "",
|
53
|
-
delegate_log_class.info msg,
|
52
|
+
def info msg = "", &blk
|
53
|
+
delegate_log_class.info msg, self.class.to_s, &blk
|
54
54
|
end
|
55
55
|
|
56
|
-
def warn msg = "",
|
57
|
-
delegate_log_class.warn msg,
|
56
|
+
def warn msg = "", &blk
|
57
|
+
delegate_log_class.warn msg, self.class.to_s, &blk
|
58
58
|
end
|
59
59
|
|
60
|
-
def error msg = "",
|
61
|
-
delegate_log_class.error msg,
|
60
|
+
def error msg = "", &blk
|
61
|
+
delegate_log_class.error msg, self.class.to_s, &blk
|
62
62
|
end
|
63
63
|
|
64
|
-
def fatal msg = "",
|
65
|
-
delegate_log_class.fatal msg,
|
64
|
+
def fatal msg = "", &blk
|
65
|
+
delegate_log_class.fatal msg, self.class.to_s, &blk
|
66
66
|
end
|
67
67
|
|
68
|
-
def stack msg = "", lvl = Log::DEBUG,
|
69
|
-
delegate_log_class.stack msg, lvl,
|
68
|
+
def stack msg = "", lvl = Log::DEBUG, &blk
|
69
|
+
delegate_log_class.stack msg, lvl, self.class.to_s, &blk
|
70
70
|
end
|
71
71
|
|
72
|
-
def write msg = "",
|
73
|
-
delegate_log_class.write msg,
|
72
|
+
def write msg = "", &blk
|
73
|
+
delegate_log_class.write msg, self.class.to_s, &blk
|
74
74
|
end
|
75
75
|
|
76
76
|
def method_missing meth, *args, &blk
|
@@ -89,8 +89,8 @@ module Logue
|
|
89
89
|
|
90
90
|
def add_color_method color, code
|
91
91
|
meth = Array.new
|
92
|
-
meth << "def #{color}(msg = \"\", lvl = Log::DEBUG,
|
93
|
-
meth << " Log.#{color} msg, lvl,
|
92
|
+
meth << "def #{color}(msg = \"\", lvl = Log::DEBUG, cname = nil, &blk)"
|
93
|
+
meth << " Log.#{color} msg, lvl, self.class.to_s, &blk"
|
94
94
|
meth << "end"
|
95
95
|
self.class.module_eval meth.join("\n")
|
96
96
|
end
|
data/lib/logue/logger.rb
CHANGED
@@ -9,13 +9,12 @@
|
|
9
9
|
# Documentation:: Author
|
10
10
|
#
|
11
11
|
|
12
|
-
require '
|
13
|
-
require '
|
14
|
-
require '
|
15
|
-
require 'logue/
|
16
|
-
require 'logue/
|
17
|
-
require 'logue/
|
18
|
-
require 'logue/frame'
|
12
|
+
require 'logue/level'
|
13
|
+
require 'logue/colorlog'
|
14
|
+
require 'logue/writer'
|
15
|
+
require 'logue/filter'
|
16
|
+
require 'logue/legacy_logger'
|
17
|
+
require 'logue/stack'
|
19
18
|
|
20
19
|
#
|
21
20
|
# == Logger
|
@@ -29,220 +28,114 @@ require 'logue/frame'
|
|
29
28
|
#
|
30
29
|
|
31
30
|
module Logue
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
attr_accessor :format
|
43
|
-
|
44
|
-
include Logue::Log::Severity
|
45
|
-
|
46
|
-
def initialize
|
47
|
-
reset
|
48
|
-
end
|
49
|
-
|
50
|
-
def verbose= v
|
51
|
-
@level = case v
|
52
|
-
when TrueClass
|
53
|
-
DEBUG
|
54
|
-
when FalseClass
|
55
|
-
FATAL
|
56
|
-
when Integer
|
57
|
-
v
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def reset
|
62
|
-
@level = FATAL
|
63
|
-
@ignored_files = Hash.new
|
64
|
-
@ignored_methods = Hash.new
|
65
|
-
@ignored_classes = Hash.new
|
66
|
-
@output = $stdout
|
67
|
-
@colors = Array.new
|
68
|
-
@colorize_line = false
|
69
|
-
@format = Logue::LocationFormat.new
|
70
|
-
end
|
71
|
-
|
72
|
-
def trim= what
|
73
|
-
end
|
74
|
-
|
75
|
-
def verbose
|
76
|
-
level <= DEBUG
|
77
|
-
end
|
78
|
-
|
79
|
-
def set_default_widths
|
80
|
-
@format = Logue::LocationFormat.new
|
81
|
-
end
|
82
|
-
|
83
|
-
def verbose
|
84
|
-
level <= DEBUG
|
85
|
-
end
|
86
|
-
|
87
|
-
def quiet
|
88
|
-
level >= WARN
|
89
|
-
end
|
90
|
-
|
91
|
-
def quiet= b
|
92
|
-
level = b ? WARN : DEBUG
|
93
|
-
end
|
94
|
-
|
95
|
-
# Assigns output to a file with the given name. Returns the file; the client is responsible for
|
96
|
-
# closing it.
|
97
|
-
def outfile= f
|
98
|
-
@output = f.kind_of?(IO) ? f : File.new(f, "w")
|
99
|
-
end
|
100
|
-
|
101
|
-
# Creates a printf format for the given widths, for aligning output. To lead lines with zeros
|
102
|
-
# (e.g., "00317") the line_width argument must be a string, not an integer.
|
103
|
-
def set_widths file, line, function
|
104
|
-
@format = Logue::LocationFormat.new file: file, line: line, function: function
|
105
|
-
end
|
31
|
+
class Logger
|
32
|
+
include LegacyLogger
|
33
|
+
include ColorLog
|
34
|
+
|
35
|
+
attr_accessor :level
|
36
|
+
attr_accessor :format
|
37
|
+
attr_accessor :filter
|
38
|
+
attr_accessor :writer
|
39
|
+
|
40
|
+
include Level
|
106
41
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
42
|
+
def initialize format: LocationFormat.new, level: WARN, filter: Filter.new, writer: Writer.new
|
43
|
+
reset format: format, level: level, filter: filter, writer: writer
|
44
|
+
end
|
45
|
+
|
46
|
+
def verbose= v
|
47
|
+
@level = case v
|
48
|
+
when TrueClass
|
49
|
+
DEBUG
|
50
|
+
when FalseClass
|
51
|
+
FATAL
|
52
|
+
when Integer
|
53
|
+
v
|
54
|
+
end
|
55
|
+
end
|
118
56
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
def log_method methname
|
124
|
-
ignored_methods.delete methname
|
125
|
-
end
|
126
|
-
|
127
|
-
def log_class classname
|
128
|
-
ignored_classes.delete classname
|
129
|
-
end
|
57
|
+
def verbose
|
58
|
+
@level <= DEBUG
|
59
|
+
end
|
130
60
|
|
131
|
-
|
132
|
-
|
133
|
-
|
61
|
+
def reset format: LocationFormat.new, level: FATAL, filter: Filter.new, writer: Writer.new
|
62
|
+
@level = level
|
63
|
+
@filter = filter
|
64
|
+
@format = format
|
65
|
+
@writer = writer
|
66
|
+
end
|
67
|
+
|
68
|
+
def quiet
|
69
|
+
@level >= WARN
|
70
|
+
end
|
134
71
|
|
135
|
-
|
136
|
-
|
137
|
-
|
72
|
+
def quiet= b
|
73
|
+
@level = b ? WARN : DEBUG
|
74
|
+
end
|
138
75
|
|
139
|
-
|
140
|
-
|
141
|
-
|
76
|
+
# Assigns output to a file with the given name. Returns the file; the client is responsible for
|
77
|
+
# closing it.
|
78
|
+
def outfile= f
|
79
|
+
io = f.kind_of?(IO) ? f : File.new(f, "w")
|
80
|
+
@writer.output = io
|
81
|
+
end
|
142
82
|
|
143
|
-
|
144
|
-
|
145
|
-
|
83
|
+
# Creates a printf format for the given widths, for aligning output. To lead lines with zeros
|
84
|
+
# (e.g., "00317") the line argument must be a string, with leading zeros, not an integer.
|
85
|
+
def set_widths file, line, method
|
86
|
+
@format = LocationFormat.new file: file, line: line, method: method
|
87
|
+
end
|
146
88
|
|
147
|
-
|
148
|
-
|
149
|
-
|
89
|
+
def debug msg = "", cname = nil, &blk
|
90
|
+
log msg, DEBUG, cname, &blk
|
91
|
+
end
|
150
92
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
frame = nil
|
155
|
-
|
156
|
-
stk = caller 0
|
157
|
-
stk.reverse.each_with_index do |frm, idx|
|
158
|
-
if frm.index(%r{logue/log.*:\d+:in\b})
|
159
|
-
break
|
160
|
-
else
|
161
|
-
frame = frm
|
162
|
-
end
|
163
|
-
end
|
93
|
+
def info msg = "", cname = nil, &blk
|
94
|
+
log msg, INFO, cname, &blk
|
95
|
+
end
|
164
96
|
|
165
|
-
|
97
|
+
def warn msg = "", cname = nil, &blk
|
98
|
+
log msg, WARN, cname, &blk
|
166
99
|
end
|
167
|
-
end
|
168
100
|
|
169
|
-
|
170
|
-
|
171
|
-
if lvl >= level
|
172
|
-
stk = caller depth
|
173
|
-
stk.each do |frame|
|
174
|
-
print_stack_frame frame, cname, msg, lvl, &blk
|
175
|
-
cname = nil
|
176
|
-
msg = ""
|
177
|
-
end
|
101
|
+
def error msg = "", cname = nil, &blk
|
102
|
+
log msg, ERROR, cname, &blk
|
178
103
|
end
|
179
|
-
end
|
180
104
|
|
181
|
-
|
182
|
-
|
183
|
-
func = cname ? cname + "#" + frm.function : frm.function
|
184
|
-
|
185
|
-
unless ignored_files[frm.path] || (cname && ignored_classes[cname]) || ignored_methods[func]
|
186
|
-
print_formatted(frm.path, frm.line, func, msg, lvl, &blk)
|
105
|
+
def fatal msg = "", cname = nil, &blk
|
106
|
+
log msg, FATAL, cname, &blk
|
187
107
|
end
|
188
|
-
end
|
189
108
|
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
end
|
194
|
-
|
195
|
-
def print hdr, msg, lvl, &blk
|
196
|
-
if blk
|
197
|
-
x = blk.call
|
198
|
-
if x.kind_of? String
|
199
|
-
msg = x
|
200
|
-
else
|
201
|
-
return
|
202
|
-
end
|
109
|
+
# Logs the given message.
|
110
|
+
def log msg = "", lvl = DEBUG, cname = nil, &blk
|
111
|
+
log_frames cname, msg, lvl, 0, &blk
|
203
112
|
end
|
204
113
|
|
205
|
-
|
114
|
+
# Shows the current stack.
|
115
|
+
def stack msg = "", lvl = DEBUG, cname = nil, &blk
|
116
|
+
log_frames cname, msg, lvl, -1, &blk
|
117
|
+
end
|
206
118
|
|
207
|
-
|
208
|
-
if
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
119
|
+
def log_frames cname, msg, lvl, num, &blk
|
120
|
+
if lvl >= level
|
121
|
+
stack = Stack.new
|
122
|
+
stack.filtered[0 .. num].each do |frame|
|
123
|
+
log_frame frame, cname, msg, lvl, &blk
|
124
|
+
cname = nil
|
125
|
+
msg = ""
|
126
|
+
end
|
213
127
|
end
|
214
|
-
|
215
|
-
@output.puts hdr + " " + msg
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
def set_color lvl, color
|
220
|
-
@colors[lvl] = color
|
221
|
-
end
|
128
|
+
end
|
222
129
|
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
if code = validcolors[meth]
|
228
|
-
add_color_method meth.to_s, code + 30
|
229
|
-
send meth, *args, &blk
|
230
|
-
else
|
231
|
-
super
|
130
|
+
def log_frame frame, cname, msg, lvl, &blk
|
131
|
+
if @filter.log? frame.path, cname, frame.method
|
132
|
+
print_formatted frame, cname, msg, lvl, &blk
|
133
|
+
end
|
232
134
|
end
|
233
|
-
end
|
234
|
-
|
235
|
-
def respond_to? meth
|
236
|
-
# validcolors = Rainbow::X11ColorNames::NAMES
|
237
|
-
validcolors = Rainbow::Color::Named::NAMES
|
238
|
-
validcolors.include?(meth) || super
|
239
|
-
end
|
240
135
|
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
instmeth << "end"
|
246
|
-
instance_eval instmeth.join("\n")
|
136
|
+
def print_formatted frame, cname, msg, lvl, &blk
|
137
|
+
location = frame.formatted @format, cname
|
138
|
+
@writer.print location, msg, level, &blk
|
139
|
+
end
|
247
140
|
end
|
248
141
|
end
|
data/lib/logue/pathutil.rb
CHANGED
@@ -2,42 +2,41 @@
|
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
4
|
module Logue
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
str[0 ... maxlen.to_i.abs]
|
11
|
-
end
|
5
|
+
class PathUtil
|
6
|
+
class << self
|
7
|
+
def trim_left str, maxlen
|
8
|
+
str[0 ... maxlen.to_i.abs]
|
9
|
+
end
|
12
10
|
|
13
|
-
|
14
|
-
|
11
|
+
def trim_right str, maxlen
|
12
|
+
mxln = maxlen.abs
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
if str.length > mxln
|
15
|
+
trim_path_right str, maxlen
|
16
|
+
else
|
17
|
+
str
|
18
|
+
end
|
20
19
|
end
|
21
|
-
end
|
22
20
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
str = newstr
|
32
|
-
else
|
33
|
-
newstr = "..." + "/" + str
|
34
|
-
if newstr.length <= mxln
|
21
|
+
def trim_path_right path, maxlen
|
22
|
+
mxln = maxlen.abs
|
23
|
+
|
24
|
+
comps = path.split "/"
|
25
|
+
str = comps.pop
|
26
|
+
comps.reverse.each do |comp|
|
27
|
+
newstr = comp + "/" + str
|
28
|
+
if newstr.length + 4 <= mxln
|
35
29
|
str = newstr
|
30
|
+
else
|
31
|
+
newstr = "..." + "/" + str
|
32
|
+
if newstr.length <= mxln
|
33
|
+
str = newstr
|
34
|
+
end
|
35
|
+
break
|
36
36
|
end
|
37
|
-
break
|
38
37
|
end
|
39
|
-
|
40
|
-
|
41
|
-
end
|
38
|
+
str
|
39
|
+
end
|
40
|
+
end
|
42
41
|
end
|
43
42
|
end
|
data/lib/logue/severity.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/ruby -w
|
2
2
|
# -*- ruby -*-
|
3
3
|
#
|
4
|
-
# =
|
4
|
+
# = level.rb
|
5
5
|
#
|
6
6
|
# Logging Module
|
7
7
|
#
|
@@ -9,14 +9,13 @@
|
|
9
9
|
# Documentation:: Author
|
10
10
|
#
|
11
11
|
|
12
|
+
require 'logue/level'
|
13
|
+
|
12
14
|
module Logue
|
13
15
|
class Log
|
16
|
+
# legacy module that is replaced by Logue::Level
|
14
17
|
module Severity
|
15
|
-
|
16
|
-
INFO = 1
|
17
|
-
WARN = 2
|
18
|
-
ERROR = 3
|
19
|
-
FATAL = 4
|
18
|
+
include Logue::Level
|
20
19
|
end
|
21
20
|
end
|
22
21
|
end
|
data/lib/logue/stack.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
require 'logue/frame'
|
5
|
+
|
6
|
+
module Logue
|
7
|
+
class Stack
|
8
|
+
attr_reader :frames
|
9
|
+
|
10
|
+
def initialize depth: 2
|
11
|
+
# caller_locations requires Ruby 2.0+
|
12
|
+
locations = caller_locations depth
|
13
|
+
@frames = locations.collect do |loc|
|
14
|
+
# no absolute_path from "(eval)"
|
15
|
+
Frame.new path: loc.absolute_path || loc.path, line: loc.lineno, method: loc.label
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def filtered
|
20
|
+
logframe = @frames.rindex { |frm| frm.path.include? "logue/lib/logue" }
|
21
|
+
@frames[logframe + 1 .. -1]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/logue/version.rb
CHANGED
data/lib/logue/writer.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- ruby -*-
|
3
|
+
|
4
|
+
module Logue
|
5
|
+
class Writer
|
6
|
+
attr_accessor :output
|
7
|
+
attr_accessor :colors
|
8
|
+
attr_accessor :colorize_line
|
9
|
+
|
10
|
+
def initialize output: $stdout, colors: Array.new, colorize_line: false
|
11
|
+
@output = output
|
12
|
+
@colors = colors
|
13
|
+
@colorize_line = colorize_line
|
14
|
+
end
|
15
|
+
|
16
|
+
def print location, msg, lvl, &blk
|
17
|
+
if blk
|
18
|
+
x = blk.call
|
19
|
+
if x.kind_of? String
|
20
|
+
msg = x
|
21
|
+
else
|
22
|
+
return
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
msg = msg.to_s.chomp
|
27
|
+
line = line location, msg, lvl
|
28
|
+
@output.puts line
|
29
|
+
end
|
30
|
+
|
31
|
+
def line location, msg, lvl
|
32
|
+
if lvlcol = @colors[lvl]
|
33
|
+
if @colorize_line
|
34
|
+
line = location + " " + msg
|
35
|
+
line.color lvlcol
|
36
|
+
else
|
37
|
+
location + " " + msg.color(lvlcol)
|
38
|
+
end
|
39
|
+
else
|
40
|
+
location + " " + msg
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Pace
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -97,8 +97,12 @@ files:
|
|
97
97
|
- bin/console
|
98
98
|
- bin/setup
|
99
99
|
- lib/logue.rb
|
100
|
+
- lib/logue/colorlog.rb
|
100
101
|
- lib/logue/colors.rb
|
102
|
+
- lib/logue/filter.rb
|
101
103
|
- lib/logue/frame.rb
|
104
|
+
- lib/logue/legacy_logger.rb
|
105
|
+
- lib/logue/level.rb
|
102
106
|
- lib/logue/line.rb
|
103
107
|
- lib/logue/location.rb
|
104
108
|
- lib/logue/location_format.rb
|
@@ -107,7 +111,9 @@ files:
|
|
107
111
|
- lib/logue/logger.rb
|
108
112
|
- lib/logue/pathutil.rb
|
109
113
|
- lib/logue/severity.rb
|
114
|
+
- lib/logue/stack.rb
|
110
115
|
- lib/logue/version.rb
|
116
|
+
- lib/logue/writer.rb
|
111
117
|
- logue.gemspec
|
112
118
|
homepage: https://www.github.com/jpace/logue
|
113
119
|
licenses:
|