logbert 0.6.4 → 0.6.13
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.
- checksums.yaml +4 -4
- data/lib/logbert/formatters.rb +15 -2
- data/lib/logbert/levels.rb +57 -31
- data/lib/logbert/logger.rb +30 -2
- data/lib/logbert/message.rb +6 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26bafce2e48323c5a058c24fcb462e6502c09493
|
4
|
+
data.tar.gz: 69b57207d64eac6b5a7588f1fcec11efcf725de3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ce4a7daaa541567e830819e6e24d86b7cd2257cf13872d8cb0845a85888de23a4b46531e31798580403414566c37e910cc8345aeaf0a7f0388ab160df207522
|
7
|
+
data.tar.gz: dd8351a14e2440195f0591a277c2689e448957fd3005bc512f8affef7d1943e039aa4e266c0883ccb5a1aa7c8322c5c0be2b24ce63c07904f82cb45f9989b4a7
|
data/lib/logbert/formatters.rb
CHANGED
@@ -4,7 +4,7 @@ require 'logbert/message'
|
|
4
4
|
module Logbert
|
5
5
|
|
6
6
|
module Formatters
|
7
|
-
|
7
|
+
|
8
8
|
class Formatter
|
9
9
|
def format(msg)
|
10
10
|
raise NotImplementedError
|
@@ -14,7 +14,20 @@ module Logbert
|
|
14
14
|
class SimpleFormatter < Formatter
|
15
15
|
def format(msg)
|
16
16
|
level = msg.level.to_s.upcase.ljust(8)
|
17
|
-
"#{level} [time='#{msg.time}' pid='#{msg.pid}' logger='#{msg.logger}'] : #{msg.content}"
|
17
|
+
output = "#{level} [time='#{msg.time}' pid='#{msg.pid}' logger='#{msg.logger}'] : #{msg.content}"
|
18
|
+
if msg.exception
|
19
|
+
output = [output, "\n\nException information:\n", msg.exception.class, ": ", msg.exception.message, "\n"]
|
20
|
+
|
21
|
+
backtrace = backtrace = msg.exception.backtrace
|
22
|
+
if backtrace
|
23
|
+
output += [backtrace.join($/), "\n\n"]
|
24
|
+
else
|
25
|
+
output << "(Backtrace is unavailable)\n\n"
|
26
|
+
end
|
27
|
+
|
28
|
+
output = output.join
|
29
|
+
end
|
30
|
+
return output
|
18
31
|
end
|
19
32
|
end
|
20
33
|
|
data/lib/logbert/levels.rb
CHANGED
@@ -21,75 +21,101 @@ module Logbert
|
|
21
21
|
def to_s
|
22
22
|
@name.to_s
|
23
23
|
end
|
24
|
+
|
25
|
+
def inspect
|
26
|
+
"Level(#{@name.inspect}, #{@value})"
|
27
|
+
end
|
24
28
|
end
|
25
29
|
|
26
30
|
# This class doubles as a mixin. Bazinga!
|
27
31
|
class LevelManager < Module
|
28
32
|
|
29
33
|
def initialize
|
30
|
-
@
|
31
|
-
@value_to_level = {}
|
34
|
+
@level_to_aliases = {}
|
32
35
|
|
33
36
|
@quick_lookup = {}
|
34
37
|
|
35
38
|
Logbert::DefaultLevels.each{|name, value| self.define_level(name, value)}
|
39
|
+
self.alias_level :warn, :warning
|
36
40
|
end
|
37
41
|
|
38
|
-
|
39
|
-
@name_to_level.keys
|
40
|
-
end
|
41
|
-
|
42
|
-
def values
|
43
|
-
@value_to_level.keys
|
44
|
-
end
|
45
|
-
|
42
|
+
|
46
43
|
def levels
|
47
|
-
@
|
48
|
-
end
|
44
|
+
@level_to_aliases.keys
|
45
|
+
end
|
49
46
|
|
47
|
+
def aliases_for(level)
|
48
|
+
level = self.level_for(level)
|
49
|
+
@level_to_aliases.fetch(level)
|
50
|
+
end
|
50
51
|
|
51
52
|
def define_level(name, value)
|
52
|
-
|
53
|
-
raise ArgumentError, "The Level's name must be a Symbol or a String"
|
54
|
-
end
|
53
|
+
raise ArgumentError, "The Level's name must implement #to_sym" unless name.respond_to? :to_sym
|
55
54
|
raise ArgumentError, "The Level's value must be an Integer" unless value.is_a? Integer
|
56
55
|
|
57
|
-
|
58
|
-
|
59
|
-
raise KeyError, "A Level with that
|
56
|
+
name = name.to_sym
|
57
|
+
|
58
|
+
raise KeyError, "A Level with that name is already defined: #{name}" if @quick_lookup.has_key? name
|
59
|
+
raise KeyError, "A Level with that value is already defined: #{value}" if @quick_lookup.has_key? value
|
60
60
|
|
61
61
|
level = Level.new(name, value)
|
62
62
|
|
63
|
-
@name_to_level[name] = level
|
64
|
-
@value_to_level[value] = level
|
65
63
|
@quick_lookup[name] = @quick_lookup[value] = @quick_lookup[level] = level
|
64
|
+
@level_to_aliases[level] = [name]
|
66
65
|
|
67
66
|
self.create_logging_method(name)
|
68
67
|
self.create_predicate_method(name, value)
|
68
|
+
|
69
|
+
return level
|
69
70
|
end
|
71
|
+
|
72
|
+
|
73
|
+
def alias_level(alias_name, level)
|
74
|
+
raise ArgumentError, "The Level alias must implement #to_sym: #{alias_name}" unless alias_name.respond_to? :to_sym
|
75
|
+
|
76
|
+
alias_name = alias_name.to_sym
|
77
|
+
|
78
|
+
preexisting_level = @quick_lookup[alias_name]
|
79
|
+
if preexisting_level
|
80
|
+
raise KeyError, "The alias is already taken: #{alias_name} -> #{preexisting_level}"
|
81
|
+
end
|
82
|
+
|
83
|
+
level = self.level_for!(level, false)
|
70
84
|
|
85
|
+
@level_to_aliases[level] << alias_name
|
86
|
+
@quick_lookup[alias_name] = level
|
87
|
+
|
88
|
+
alias_method alias_name, level.name
|
89
|
+
alias_method "#{alias_name}?", "#{level.name}?"
|
90
|
+
|
91
|
+
return level
|
92
|
+
end
|
71
93
|
|
72
|
-
|
94
|
+
|
95
|
+
def level_for(x, allow_virtual_levels = true)
|
73
96
|
@quick_lookup[x] or begin
|
74
97
|
if x.is_a? Integer
|
75
|
-
#
|
76
|
-
|
77
|
-
|
78
|
-
elsif x.is_a? String
|
79
|
-
level = @name_to_level[x.to_sym]
|
98
|
+
return Logbert::Level.new("LEVEL_#{x}".to_sym, x) if allow_virtual_levels
|
99
|
+
elsif x.respond_to? :to_sym
|
100
|
+
level = @quick_lookup[x.to_sym]
|
80
101
|
return level if level
|
81
102
|
end
|
82
|
-
|
83
|
-
|
103
|
+
|
104
|
+
nil
|
84
105
|
end
|
85
106
|
end
|
86
|
-
|
107
|
+
|
108
|
+
def level_for!(x, allow_virtual_levels = true)
|
109
|
+
self.level_for(x, allow_virtual_levels) or raise KeyError, "No Level could be found for input: #{x}"
|
110
|
+
end
|
111
|
+
|
112
|
+
alias :[] :level_for
|
87
113
|
|
88
114
|
protected
|
89
115
|
|
90
116
|
def create_logging_method(level_name)
|
91
|
-
define_method level_name do
|
92
|
-
self.log(level_name,
|
117
|
+
define_method level_name do |*args, &block|
|
118
|
+
self.log(level_name, *args, &block)
|
93
119
|
end
|
94
120
|
end
|
95
121
|
|
data/lib/logbert/logger.rb
CHANGED
@@ -41,8 +41,18 @@ module Logbert
|
|
41
41
|
self.factory.root
|
42
42
|
end
|
43
43
|
|
44
|
-
def log(level,
|
45
|
-
|
44
|
+
def log(level, *args, &block)
|
45
|
+
content, options = self.prepare_message_args(*args, &block)
|
46
|
+
|
47
|
+
exception = options[:exc_info]
|
48
|
+
if exception
|
49
|
+
# If the user passed in an exception, then use that one.
|
50
|
+
# Otherwise, check the magic $! variable to see if an
|
51
|
+
# exception is currently being handled.
|
52
|
+
exception = $! unless exception.is_a? Exception
|
53
|
+
end
|
54
|
+
|
55
|
+
message = Logbert::Message.create(self, @level_manager[level], exception, options, content, &block)
|
46
56
|
handle_message(message)
|
47
57
|
end
|
48
58
|
|
@@ -52,6 +62,24 @@ module Logbert
|
|
52
62
|
end
|
53
63
|
|
54
64
|
protected
|
65
|
+
|
66
|
+
|
67
|
+
# This method will be unnecessary once we upgrade to Ruby 2.x
|
68
|
+
def prepare_message_args(*args, &block)
|
69
|
+
if args.size == 0
|
70
|
+
return [nil, {}]
|
71
|
+
elsif args.size == 1
|
72
|
+
if block_given?
|
73
|
+
return [nil, args[0]]
|
74
|
+
else
|
75
|
+
return [args[0], {}]
|
76
|
+
end
|
77
|
+
elsif args.size == 2
|
78
|
+
return [args[0], args[1]]
|
79
|
+
else
|
80
|
+
raise ArgumentError, "wrong number of arguments (#{args.size} for 0..2)"
|
81
|
+
end
|
82
|
+
end
|
55
83
|
|
56
84
|
def handle_message(message)
|
57
85
|
if message.level.value >= self.level.value
|
data/lib/logbert/message.rb
CHANGED
@@ -2,20 +2,22 @@
|
|
2
2
|
module Logbert
|
3
3
|
|
4
4
|
class Message
|
5
|
-
attr_reader :logger, :level, :time, :pid, :content_proc
|
5
|
+
attr_reader :logger, :level, :time, :pid, :exception, :options, :content_proc
|
6
6
|
|
7
|
-
def initialize(logger, level, time, pid, content = nil, &content_proc)
|
7
|
+
def initialize(logger, level, time, pid, exception, options, content = nil, &content_proc)
|
8
8
|
@logger = logger
|
9
9
|
@level = level
|
10
10
|
@time = time
|
11
11
|
@pid = pid
|
12
|
+
@exception = exception
|
13
|
+
@options = options
|
12
14
|
|
13
15
|
@content = content
|
14
16
|
@content_proc = content_proc
|
15
17
|
end
|
16
18
|
|
17
|
-
def self.create(logger, level, content = nil, &content_proc)
|
18
|
-
Message.new logger, level, Time.now, Process.pid, content, &content_proc
|
19
|
+
def self.create(logger, level, exception, options, content = nil, &content_proc)
|
20
|
+
Message.new logger, level, Time.now, Process.pid, exception, options, content, &content_proc
|
19
21
|
end
|
20
22
|
|
21
23
|
# Returns the content. If the content has not been created yet,
|