dlogger 0.0.6 → 0.1.0
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/dlogger/logger.rb +31 -23
- data/lib/dlogger/outputs/em/syslog.rb +1 -1
- data/lib/dlogger/version.rb +1 -1
- data/specs/lib/logger_spec.rb +39 -27
- 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: 83c18123e6a73b53e44d03320171e283956614e7
|
4
|
+
data.tar.gz: 1af099b572aee8487cbf46dbc8cbba76659d47ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 892de0a86b92e6c98e59168c613fafa7b6f24061ab9bf37a30e3c23aa1532d619fbcc7de0f9d111e71002a01006fa8f1647d2828bcbcbc7436891341010b463b
|
7
|
+
data.tar.gz: 02d049557506e790790b407c4ac87c94ba945541ae81f159a10e1906b2b1f2f4309a075122a3c3ec979a02682ebe568f3246c42f94e7d479b129f4d6752a502d
|
data/lib/dlogger/logger.rb
CHANGED
@@ -8,7 +8,7 @@ module DLogger
|
|
8
8
|
|
9
9
|
def initialize(name = "_default")
|
10
10
|
@name = name
|
11
|
-
@outputs =
|
11
|
+
@outputs = {}
|
12
12
|
@global_context = {}
|
13
13
|
@level = 0
|
14
14
|
end
|
@@ -21,22 +21,16 @@ module DLogger
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
LOG_LEVELS.each.with_index do |name, index|
|
25
|
-
class_eval(%{
|
26
|
-
def #{name}?
|
27
|
-
#{index} >= @level
|
28
|
-
end
|
29
|
-
})
|
30
|
-
end
|
31
|
-
|
32
24
|
##
|
33
25
|
# Main entry point, log a message with
|
34
26
|
# its metadata.
|
35
27
|
#
|
36
28
|
# @param [String] msg the message
|
37
29
|
# @param [Hash] metadata Additional data
|
30
|
+
# @param [Array] restrict If set the output will only be sent to these
|
31
|
+
# outputs.
|
38
32
|
#
|
39
|
-
def log(msg, metadata
|
33
|
+
def log(msg, metadata: {}, restrict: [])
|
40
34
|
# clearing a small hash is slightly faster than creating a new
|
41
35
|
# one each time.
|
42
36
|
merged_metadata.clear
|
@@ -66,18 +60,26 @@ module DLogger
|
|
66
60
|
end
|
67
61
|
end
|
68
62
|
|
69
|
-
dispatch(msg, merged_metadata)
|
63
|
+
dispatch(msg, metadata: merged_metadata, restrict: restrict)
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.level_as_sym(level)
|
67
|
+
LOG_LEVELS[level]
|
70
68
|
end
|
71
69
|
|
72
70
|
# Helper methods to mimic the standard ruby logger interface.
|
73
|
-
|
74
|
-
class_eval
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
71
|
+
LOG_LEVELS.each.with_index do |name, index|
|
72
|
+
class_eval(%{
|
73
|
+
def #{name}?
|
74
|
+
#{index} >= @level
|
75
|
+
end
|
76
|
+
|
77
|
+
def #{name}(msg, metadata: {}, restrict: [])
|
78
|
+
# metadata << [:severity, :#{name}]
|
79
|
+
metadata[:severity] = :#{name}
|
80
|
+
log(msg, metadata: metadata, restrict: restrict)
|
81
|
+
end
|
82
|
+
}, __FILE__, __LINE__)
|
81
83
|
end
|
82
84
|
|
83
85
|
##
|
@@ -86,8 +88,8 @@ module DLogger
|
|
86
88
|
#
|
87
89
|
# @param [Object] handler the handler
|
88
90
|
#
|
89
|
-
def add_output(handler)
|
90
|
-
@outputs
|
91
|
+
def add_output(name, handler)
|
92
|
+
@outputs[name] = handler
|
91
93
|
end
|
92
94
|
|
93
95
|
|
@@ -160,8 +162,14 @@ module DLogger
|
|
160
162
|
# @param [Hash] metadata a hash including all the
|
161
163
|
# additional informations you want to make available
|
162
164
|
#
|
163
|
-
def dispatch(msg, metadata)
|
164
|
-
|
165
|
+
def dispatch(msg, metadata: metadata, restrict:)
|
166
|
+
outputs = @outputs
|
167
|
+
|
168
|
+
if restrict && (restrict.size > 0)
|
169
|
+
outputs = outputs.reject{|name, out| !restrict.include?(name) }
|
170
|
+
end
|
171
|
+
|
172
|
+
outputs.each do |name, out|
|
165
173
|
out.dispatch(msg, metadata)
|
166
174
|
end
|
167
175
|
end
|
data/lib/dlogger/version.rb
CHANGED
data/specs/lib/logger_spec.rb
CHANGED
@@ -3,29 +3,41 @@ require_relative "../common"
|
|
3
3
|
describe "Logger" do
|
4
4
|
before do
|
5
5
|
@logger = DLogger::Logger.new("logger#{rand(200)}#{rand(200)}")
|
6
|
+
@output1 = mock('out1')
|
7
|
+
@logger.add_output(:out1, @output1)
|
6
8
|
end
|
7
9
|
|
8
10
|
should "dispatch msg with its to registered outputs" do
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
+
@output1.expects(:dispatch).with("the message", id: 43, user: 'bob')
|
13
|
+
@logger.log("the message", metadata: { id: 43, user: "bob" })
|
14
|
+
end
|
15
|
+
|
16
|
+
should 'dispatch only to specified output' do
|
17
|
+
@output1.expects(:dispatch).never
|
18
|
+
|
19
|
+
out2 = mock('Output2')
|
20
|
+
out2.expects(:dispatch).with("the message", id: 43, user: 'bob')
|
12
21
|
|
13
|
-
@logger.add_output(
|
22
|
+
@logger.add_output(:out2, out2)
|
14
23
|
|
15
|
-
@logger.log("the message",
|
24
|
+
@logger.log("the message",
|
25
|
+
metadata: {id: 43, user: "bob"},
|
26
|
+
restrict: [:out2]
|
27
|
+
)
|
16
28
|
end
|
17
29
|
|
18
30
|
should 'mimic standard ruby logger interface' do
|
19
|
-
@
|
31
|
+
@output1.expects(:dispatch).with('the message', :severity => :debug)
|
20
32
|
@logger.debug("the message")
|
21
33
|
|
22
|
-
@
|
34
|
+
@output1.expects(:dispatch).with('the message', :severity => :info)
|
23
35
|
@logger.info("the message")
|
24
36
|
|
25
|
-
@
|
37
|
+
@output1.expects(:dispatch).with('the message', :severity => :warn)
|
26
38
|
@logger.warn("the message")
|
27
39
|
|
28
|
-
@
|
40
|
+
@output1.expects(:dispatch).with('the message', :severity => :error)
|
29
41
|
@logger.error("the message")
|
30
42
|
end
|
31
43
|
|
@@ -45,35 +57,35 @@ describe "Logger" do
|
|
45
57
|
|
46
58
|
describe 'with hash context' do
|
47
59
|
should 'dispatch msg and merged data' do
|
48
|
-
@
|
60
|
+
@output1.expects(:dispatch).with('msg', id: 43, user: 'bob')
|
49
61
|
|
50
62
|
@logger.with_context(:user => 'bob') do
|
51
|
-
@logger.log('msg', id: 43)
|
63
|
+
@logger.log('msg', metadata: {id: 43})
|
52
64
|
end
|
53
65
|
end
|
54
66
|
|
55
67
|
should 'allow proc as value' do
|
56
|
-
@
|
68
|
+
@output1.expects(:dispatch).with('msg', id: 43, user: 'john')
|
57
69
|
|
58
70
|
@logger.with_context(user: ->{ "john" } ) do
|
59
|
-
@logger.log('msg', id: 43)
|
71
|
+
@logger.log('msg', metadata: {id: 43})
|
60
72
|
end
|
61
73
|
|
62
74
|
end
|
63
75
|
|
64
76
|
should 'keep pushed context' do
|
65
|
-
@
|
66
|
-
@
|
67
|
-
@
|
77
|
+
@output1.expects(:dispatch).with('msg1', id: 41, global: 'A')
|
78
|
+
@output1.expects(:dispatch).with('msg2', id: 42, user: 'john', global: 'A')
|
79
|
+
@output1.expects(:dispatch).with('msg3', id: 43, global: 'A')
|
68
80
|
|
69
81
|
@logger.push_context(global: 'A')
|
70
|
-
@logger.log('msg1', id:
|
82
|
+
@logger.log('msg1', metadata: {id: 41})
|
71
83
|
|
72
84
|
@logger.with_context(user: ->{ "john" } ) do
|
73
|
-
@logger.log('msg2', id:
|
85
|
+
@logger.log('msg2', metadata: {id: 42})
|
74
86
|
end
|
75
87
|
|
76
|
-
@logger.log('msg3', id: 43)
|
88
|
+
@logger.log('msg3', metadata: {id: 43})
|
77
89
|
end
|
78
90
|
|
79
91
|
end
|
@@ -86,10 +98,10 @@ describe "Logger" do
|
|
86
98
|
end
|
87
99
|
end
|
88
100
|
|
89
|
-
@
|
101
|
+
@output1.expects(:dispatch).with('msg', id: 56, user: 'alice')
|
90
102
|
|
91
103
|
@logger.with_context(ext) do
|
92
|
-
@logger.log('msg', id: 56)
|
104
|
+
@logger.log('msg', metadata: {id: 56})
|
93
105
|
end
|
94
106
|
end
|
95
107
|
|
@@ -97,15 +109,15 @@ describe "Logger" do
|
|
97
109
|
|
98
110
|
describe 'with multiple contexts' do
|
99
111
|
should 'merge the contexts in defined order (last defined has greater priority)' do
|
100
|
-
@
|
112
|
+
@output1.expects(:dispatch).with('msg', operation: 'destroy', user: 'billy')
|
101
113
|
|
102
114
|
@logger.with_context(user: 'bob') do
|
103
115
|
@logger.with_context(user: 'billy') do
|
104
|
-
@logger.log('msg', operation: "destroy")
|
116
|
+
@logger.log('msg', metadata: {operation: "destroy"})
|
105
117
|
end
|
106
118
|
end
|
107
119
|
|
108
|
-
@
|
120
|
+
@output1.expects(:dispatch).with('some text', {})
|
109
121
|
@logger.log('some text')
|
110
122
|
end
|
111
123
|
|
@@ -118,18 +130,18 @@ describe "Logger" do
|
|
118
130
|
end
|
119
131
|
|
120
132
|
should 'include global context in log' do
|
121
|
-
@
|
122
|
-
@
|
133
|
+
@output1.expects(:dispatch).with('msg1', app: "back1", op: "add", fiber: 1)
|
134
|
+
@output1.expects(:dispatch).with('msg2', app: "back1", op: "sub", fiber: 2)
|
123
135
|
|
124
136
|
Fiber.new{
|
125
137
|
@logger.with_context(fiber: 1) do
|
126
|
-
@logger.log('msg1', op: 'add')
|
138
|
+
@logger.log('msg1', metadata: {op: 'add'})
|
127
139
|
end
|
128
140
|
}.resume
|
129
141
|
|
130
142
|
Fiber.new{
|
131
143
|
@logger.with_context(fiber: 2) do
|
132
|
-
@logger.log('msg2', op: 'sub')
|
144
|
+
@logger.log('msg2', metadata: {op: 'sub'})
|
133
145
|
end
|
134
146
|
}.resume
|
135
147
|
|