semantic_logger 4.1.1 → 4.2.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/semantic_logger.rb +6 -13
- data/lib/semantic_logger/ansi_colors.rb +10 -10
- data/lib/semantic_logger/appender.rb +42 -26
- data/lib/semantic_logger/appender/async.rb +179 -0
- data/lib/semantic_logger/appender/async_batch.rb +95 -0
- data/lib/semantic_logger/appender/bugsnag.rb +2 -1
- data/lib/semantic_logger/appender/elasticsearch.rb +113 -81
- data/lib/semantic_logger/appender/elasticsearch_http.rb +1 -3
- data/lib/semantic_logger/appender/file.rb +1 -3
- data/lib/semantic_logger/appender/graylog.rb +6 -5
- data/lib/semantic_logger/appender/honeybadger.rb +0 -2
- data/lib/semantic_logger/appender/http.rb +25 -10
- data/lib/semantic_logger/appender/kafka.rb +1 -3
- data/lib/semantic_logger/appender/mongodb.rb +1 -3
- data/lib/semantic_logger/appender/new_relic.rb +7 -3
- data/lib/semantic_logger/appender/sentry.rb +6 -7
- data/lib/semantic_logger/appender/splunk.rb +1 -2
- data/lib/semantic_logger/appender/splunk_http.rb +3 -4
- data/lib/semantic_logger/appender/syslog.rb +1 -3
- data/lib/semantic_logger/appender/tcp.rb +7 -9
- data/lib/semantic_logger/appender/udp.rb +0 -2
- data/lib/semantic_logger/appender/wrapper.rb +0 -2
- data/lib/semantic_logger/base.rb +76 -19
- data/lib/semantic_logger/formatters.rb +37 -0
- data/lib/semantic_logger/formatters/base.rb +10 -3
- data/lib/semantic_logger/formatters/json.rb +2 -6
- data/lib/semantic_logger/formatters/one_line.rb +18 -0
- data/lib/semantic_logger/formatters/raw.rb +8 -2
- data/lib/semantic_logger/formatters/signalfx.rb +169 -0
- data/lib/semantic_logger/log.rb +23 -14
- data/lib/semantic_logger/loggable.rb +88 -15
- data/lib/semantic_logger/logger.rb +0 -20
- data/lib/semantic_logger/metric/new_relic.rb +75 -0
- data/lib/semantic_logger/metric/signalfx.rb +123 -0
- data/lib/semantic_logger/{metrics → metric}/statsd.rb +20 -8
- data/lib/semantic_logger/processor.rb +67 -169
- data/lib/semantic_logger/semantic_logger.rb +7 -31
- data/lib/semantic_logger/subscriber.rb +32 -36
- data/lib/semantic_logger/utils.rb +47 -0
- data/lib/semantic_logger/version.rb +1 -1
- data/test/appender/async_batch_test.rb +61 -0
- data/test/appender/async_test.rb +45 -0
- data/test/appender/elasticsearch_http_test.rb +3 -3
- data/test/appender/elasticsearch_test.rb +211 -49
- data/test/appender/file_test.rb +9 -8
- data/test/appender/mongodb_test.rb +3 -3
- data/test/appender/newrelic_rpm.rb +6 -0
- data/test/appender/sentry_test.rb +3 -1
- data/test/appender/wrapper_test.rb +29 -0
- data/test/concerns/compatibility_test.rb +64 -60
- data/test/debug_as_trace_logger_test.rb +62 -77
- data/test/formatters/one_line_test.rb +61 -0
- data/test/formatters/signalfx_test.rb +200 -0
- data/test/formatters_test.rb +36 -0
- data/test/in_memory_appender.rb +9 -0
- data/test/in_memory_appender_helper.rb +43 -0
- data/test/in_memory_batch_appender.rb +9 -0
- data/test/in_memory_metrics_appender.rb +14 -0
- data/test/loggable_test.rb +15 -30
- data/test/logger_test.rb +181 -135
- data/test/measure_test.rb +212 -113
- data/test/metric/new_relic_test.rb +36 -0
- data/test/metric/signalfx_test.rb +78 -0
- data/test/semantic_logger_test.rb +58 -65
- data/test/test_helper.rb +19 -2
- metadata +33 -7
- data/lib/semantic_logger/metrics/new_relic.rb +0 -30
- data/lib/semantic_logger/metrics/udp.rb +0 -80
- data/test/mock_logger.rb +0 -29
@@ -0,0 +1,36 @@
|
|
1
|
+
# So that the NewRelic appender will load the mock
|
2
|
+
$LOAD_PATH.unshift File.dirname(__FILE__)
|
3
|
+
require_relative '../test_helper'
|
4
|
+
|
5
|
+
# Unit Test for SemanticLogger::Appender::NewRelic
|
6
|
+
module Metric
|
7
|
+
class NewRelicTest < Minitest::Test
|
8
|
+
describe SemanticLogger::Appender::NewRelic do
|
9
|
+
|
10
|
+
before do
|
11
|
+
@appender = SemanticLogger::Metric::NewRelic.new
|
12
|
+
@message = 'AppenderNewRelicTest log message'
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'logs counter metric' do
|
16
|
+
name = amount = nil
|
17
|
+
NewRelic::Agent.stub(:increment_metric, -> name_, amount_ { name = name_, amount = amount_ }) do
|
18
|
+
@appender.info(message: @message, metric: 'User/authenticated')
|
19
|
+
end
|
20
|
+
assert_equal 'Custom/User/authenticated', name.first
|
21
|
+
assert_equal 1, amount
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'logs duration metric' do
|
25
|
+
name = duration = nil
|
26
|
+
NewRelic::Agent.stub(:record_metric, -> name_, duration_ { name = name_, duration = duration_ }) do
|
27
|
+
@appender.measure_info(message: @message, metric: 'User/authenticate') do
|
28
|
+
sleep 0.001
|
29
|
+
end
|
30
|
+
end
|
31
|
+
assert_equal 'Custom/User/authenticate', name.first
|
32
|
+
assert duration
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
module Appender
|
4
|
+
class SignalfxTest < Minitest::Test
|
5
|
+
describe SemanticLogger::Metric::Signalfx do
|
6
|
+
before do
|
7
|
+
@metric = '/user/login'
|
8
|
+
@log = SemanticLogger::Log.new('User', :debug)
|
9
|
+
@log.metric = @metric
|
10
|
+
end
|
11
|
+
|
12
|
+
let :appender do
|
13
|
+
if ENV['SIGNALFX_TOKEN']
|
14
|
+
SemanticLogger::Metric::Signalfx.new(token: ENV['SIGNALFX_TOKEN'])
|
15
|
+
else
|
16
|
+
Net::HTTP.stub_any_instance(:start, true) do
|
17
|
+
@appender = SemanticLogger::Metric::Signalfx.new(token: 'TEST')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'log message' do
|
23
|
+
let :response do
|
24
|
+
# Do not stub if the token is available in the environment
|
25
|
+
if ENV['SIGNALFX_TOKEN']
|
26
|
+
appender.log(@log)
|
27
|
+
else
|
28
|
+
response_mock = Struct.new(:code, :body)
|
29
|
+
request = nil
|
30
|
+
appender.http.stub(:request, -> r { request = r; response_mock.new('200', 'ok') }) do
|
31
|
+
appender.log(@log)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'send counter metric when there is no duration' do
|
37
|
+
assert response
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'send custom counter metric when there is no duration' do
|
41
|
+
@log.metric = 'Filter/count'
|
42
|
+
@log.dimensions = {action: 'hit', user: 'jbloggs', state: 'FL'}
|
43
|
+
assert response
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'send gauge metric when log includes duration' do
|
47
|
+
@log.duration = 1234
|
48
|
+
assert response
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'whitelists dimensions' do
|
52
|
+
@log.named_tags = {user_id: 47, application: 'sample', tracking_number: 7474, session_id: 'hsdhngsd'}
|
53
|
+
appender.formatter.dimensions = [:user_id, :application]
|
54
|
+
assert response
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'should_log?' do
|
59
|
+
it 'logs metric only metric' do
|
60
|
+
assert appender.should_log?(@log)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'not logs when no metric' do
|
64
|
+
@log.message = 'blah'
|
65
|
+
@log.metric = nil
|
66
|
+
refute appender.should_log?(@log)
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'logs metric only metric with dimensions' do
|
70
|
+
@log.metric = 'Filter/count'
|
71
|
+
@log.dimensions = {action: 'hit', user: 'jbloggs', state: 'FL'}
|
72
|
+
assert appender.should_log?(@log)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -23,7 +23,7 @@ class SemanticLoggerTest < Minitest::Test
|
|
23
23
|
@appender = SemanticLogger.add_appender(file_name: 'sample.log', formatter: :json)
|
24
24
|
assert @appender.is_a?(SemanticLogger::Appender::File)
|
25
25
|
assert SemanticLogger.appenders.include?(@appender)
|
26
|
-
assert @appender.formatter.is_a?(SemanticLogger::Formatters::Json)
|
26
|
+
assert @appender.formatter.is_a?(SemanticLogger::Formatters::Json), @appender.formatter.inspect
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'adds stream appender' do
|
@@ -116,40 +116,25 @@ class SemanticLoggerTest < Minitest::Test
|
|
116
116
|
end
|
117
117
|
|
118
118
|
describe 'mock_logger' do
|
119
|
-
|
120
|
-
# Use a mock logger that just keeps the last logged entry in an instance
|
121
|
-
# variable
|
122
|
-
SemanticLogger.default_level = :trace
|
123
|
-
SemanticLogger.backtrace_level = nil
|
124
|
-
@mock_logger = MockLogger.new
|
125
|
-
@appender = SemanticLogger.add_appender(logger: @mock_logger)
|
126
|
-
|
127
|
-
# Use this test's class name as the application name in the log output
|
128
|
-
@logger = SemanticLogger['LoggerTest']
|
129
|
-
@hash = {session_id: 'HSSKLEU@JDK767', tracking_number: 12345}
|
130
|
-
@hash_str = @hash.inspect.sub("{", "\\{").sub("}", "\\}")
|
131
|
-
@thread_name = Thread.current.name
|
132
|
-
end
|
133
|
-
|
134
|
-
after do
|
135
|
-
SemanticLogger.remove_appender(@appender)
|
136
|
-
end
|
119
|
+
include InMemoryAppenderHelper
|
137
120
|
|
138
121
|
describe '.tagged' do
|
139
122
|
it 'add tags to log entries' do
|
140
123
|
SemanticLogger.tagged('12345', 'DJHSFK') do
|
141
|
-
|
142
|
-
|
143
|
-
|
124
|
+
logger.info('Hello world')
|
125
|
+
|
126
|
+
assert log = log_message
|
127
|
+
assert_equal %w(12345 DJHSFK), log.tags
|
144
128
|
end
|
145
129
|
end
|
146
130
|
|
147
131
|
it 'add embedded tags to log entries' do
|
148
132
|
SemanticLogger.tagged('First Level', 'tags') do
|
149
133
|
SemanticLogger.tagged('Second Level') do
|
150
|
-
|
151
|
-
|
152
|
-
|
134
|
+
logger.info('Hello world')
|
135
|
+
|
136
|
+
assert log = log_message
|
137
|
+
assert_equal ['First Level', 'tags', 'Second Level'], log.tags
|
153
138
|
end
|
154
139
|
assert_equal 2, SemanticLogger.tags.count, SemanticLogger.tags
|
155
140
|
assert_equal 'First Level', SemanticLogger.tags.first
|
@@ -189,9 +174,10 @@ class SemanticLoggerTest < Minitest::Test
|
|
189
174
|
SemanticLogger.named_tagged(level1: 1) do
|
190
175
|
SemanticLogger.named_tagged(level2: 2, more: 'data') do
|
191
176
|
SemanticLogger.named_tagged(level3: 3) do
|
192
|
-
|
193
|
-
|
194
|
-
|
177
|
+
logger.info('Hello world')
|
178
|
+
|
179
|
+
assert log = log_message
|
180
|
+
assert_equal({level1: 1, level2: 2, more: 'data', level3: 3}, log.named_tags)
|
195
181
|
end
|
196
182
|
end
|
197
183
|
end
|
@@ -200,10 +186,11 @@ class SemanticLoggerTest < Minitest::Test
|
|
200
186
|
|
201
187
|
describe '.fast_tag' do
|
202
188
|
it 'add string tag to log entries' do
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
189
|
+
logger.fast_tag('12345') do
|
190
|
+
logger.info('Hello world')
|
191
|
+
|
192
|
+
assert log = log_message
|
193
|
+
assert_equal %w(12345), log.tags
|
207
194
|
end
|
208
195
|
end
|
209
196
|
end
|
@@ -215,28 +202,30 @@ class SemanticLoggerTest < Minitest::Test
|
|
215
202
|
|
216
203
|
it 'not log at a level below the global default' do
|
217
204
|
assert_equal :debug, SemanticLogger.default_level
|
218
|
-
assert_equal :debug,
|
219
|
-
|
220
|
-
|
221
|
-
|
205
|
+
assert_equal :debug, logger.level
|
206
|
+
logger.trace('hello world')
|
207
|
+
|
208
|
+
refute log_message
|
222
209
|
end
|
223
210
|
|
224
211
|
it 'log at the instance level' do
|
225
212
|
assert_equal :debug, SemanticLogger.default_level
|
226
|
-
|
227
|
-
assert_equal :trace,
|
228
|
-
|
229
|
-
|
230
|
-
|
213
|
+
logger.level = :trace
|
214
|
+
assert_equal :trace, logger.level
|
215
|
+
logger.trace('hello world')
|
216
|
+
|
217
|
+
assert log = log_message
|
218
|
+
assert_equal :trace, log.level
|
219
|
+
assert_equal 'hello world', log.message
|
231
220
|
end
|
232
221
|
|
233
222
|
it 'not log at a level below the instance level' do
|
234
223
|
assert_equal :debug, SemanticLogger.default_level
|
235
|
-
|
236
|
-
assert_equal :warn,
|
237
|
-
|
238
|
-
|
239
|
-
|
224
|
+
logger.level = :warn
|
225
|
+
assert_equal :warn, logger.level
|
226
|
+
logger.debug('hello world')
|
227
|
+
|
228
|
+
refute log_message
|
240
229
|
end
|
241
230
|
end
|
242
231
|
|
@@ -247,35 +236,39 @@ class SemanticLoggerTest < Minitest::Test
|
|
247
236
|
|
248
237
|
it 'not log at a level below the silence level' do
|
249
238
|
assert_equal :info, SemanticLogger.default_level
|
250
|
-
assert_equal :info,
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
239
|
+
assert_equal :info, logger.level
|
240
|
+
logger.silence do
|
241
|
+
logger.warn('hello world')
|
242
|
+
logger.info('hello world')
|
243
|
+
logger.debug('hello world')
|
244
|
+
logger.trace('hello world')
|
256
245
|
end
|
257
|
-
|
258
|
-
|
246
|
+
|
247
|
+
refute log_message
|
259
248
|
end
|
260
249
|
|
261
250
|
it 'log at the instance level even with the silencer at a higher level' do
|
262
|
-
|
263
|
-
assert_equal :trace,
|
264
|
-
|
265
|
-
|
251
|
+
logger.level = :trace
|
252
|
+
assert_equal :trace, logger.level
|
253
|
+
logger.silence do
|
254
|
+
logger.trace('hello world')
|
266
255
|
end
|
267
|
-
|
268
|
-
|
256
|
+
|
257
|
+
assert log = log_message
|
258
|
+
assert_equal :trace, log.level
|
259
|
+
assert_equal 'hello world', log.message
|
269
260
|
end
|
270
261
|
|
271
262
|
it 'log at a silence level below the default level' do
|
272
263
|
assert_equal :info, SemanticLogger.default_level
|
273
|
-
assert_equal :info,
|
274
|
-
|
275
|
-
|
264
|
+
assert_equal :info, logger.level
|
265
|
+
logger.silence(:debug) do
|
266
|
+
logger.debug('hello world')
|
276
267
|
end
|
277
|
-
|
278
|
-
|
268
|
+
|
269
|
+
assert log = log_message
|
270
|
+
assert_equal :debug, log.level
|
271
|
+
assert_equal 'hello world', log.message
|
279
272
|
end
|
280
273
|
end
|
281
274
|
|
data/test/test_helper.rb
CHANGED
@@ -8,8 +8,25 @@ require 'minitest/autorun'
|
|
8
8
|
require 'minitest/reporters'
|
9
9
|
require 'minitest/stub_any_instance'
|
10
10
|
require 'semantic_logger'
|
11
|
-
require 'logger'
|
12
|
-
require_relative '
|
11
|
+
#require 'logger'
|
12
|
+
require_relative 'in_memory_appender'
|
13
|
+
require_relative 'in_memory_batch_appender'
|
14
|
+
require_relative 'in_memory_metrics_appender'
|
15
|
+
require_relative 'in_memory_appender_helper'
|
13
16
|
require 'awesome_print'
|
14
17
|
|
15
18
|
#Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
|
19
|
+
class Minitest::Test
|
20
|
+
# Use AwesomePrint to display diffs
|
21
|
+
define_method :mu_pp, &:awesome_inspect
|
22
|
+
|
23
|
+
# Use AwesomePrint to display messages
|
24
|
+
def message msg = nil, ending = nil, &default
|
25
|
+
proc {
|
26
|
+
msg = msg.call.chomp(".") if Proc === msg
|
27
|
+
custom_message = "#{msg.ai}.\n" unless msg.nil? or msg.to_s.empty?
|
28
|
+
"#{custom_message}#{default.call}#{ending || "."}"
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: semantic_logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -38,6 +38,8 @@ files:
|
|
38
38
|
- lib/semantic_logger.rb
|
39
39
|
- lib/semantic_logger/ansi_colors.rb
|
40
40
|
- lib/semantic_logger/appender.rb
|
41
|
+
- lib/semantic_logger/appender/async.rb
|
42
|
+
- lib/semantic_logger/appender/async_batch.rb
|
41
43
|
- lib/semantic_logger/appender/bugsnag.rb
|
42
44
|
- lib/semantic_logger/appender/elasticsearch.rb
|
43
45
|
- lib/semantic_logger/appender/elasticsearch_http.rb
|
@@ -59,24 +61,30 @@ files:
|
|
59
61
|
- lib/semantic_logger/concerns/compatibility.rb
|
60
62
|
- lib/semantic_logger/core_ext/thread.rb
|
61
63
|
- lib/semantic_logger/debug_as_trace_logger.rb
|
64
|
+
- lib/semantic_logger/formatters.rb
|
62
65
|
- lib/semantic_logger/formatters/base.rb
|
63
66
|
- lib/semantic_logger/formatters/color.rb
|
64
67
|
- lib/semantic_logger/formatters/default.rb
|
65
68
|
- lib/semantic_logger/formatters/json.rb
|
69
|
+
- lib/semantic_logger/formatters/one_line.rb
|
66
70
|
- lib/semantic_logger/formatters/raw.rb
|
71
|
+
- lib/semantic_logger/formatters/signalfx.rb
|
67
72
|
- lib/semantic_logger/formatters/syslog.rb
|
68
73
|
- lib/semantic_logger/formatters/syslog_cee.rb
|
69
74
|
- lib/semantic_logger/jruby/garbage_collection_logger.rb
|
70
75
|
- lib/semantic_logger/log.rb
|
71
76
|
- lib/semantic_logger/loggable.rb
|
72
77
|
- lib/semantic_logger/logger.rb
|
73
|
-
- lib/semantic_logger/
|
74
|
-
- lib/semantic_logger/
|
75
|
-
- lib/semantic_logger/
|
78
|
+
- lib/semantic_logger/metric/new_relic.rb
|
79
|
+
- lib/semantic_logger/metric/signalfx.rb
|
80
|
+
- lib/semantic_logger/metric/statsd.rb
|
76
81
|
- lib/semantic_logger/processor.rb
|
77
82
|
- lib/semantic_logger/semantic_logger.rb
|
78
83
|
- lib/semantic_logger/subscriber.rb
|
84
|
+
- lib/semantic_logger/utils.rb
|
79
85
|
- lib/semantic_logger/version.rb
|
86
|
+
- test/appender/async_batch_test.rb
|
87
|
+
- test/appender/async_test.rb
|
80
88
|
- test/appender/bugsnag_test.rb
|
81
89
|
- test/appender/elasticsearch_http_test.rb
|
82
90
|
- test/appender/elasticsearch_test.rb
|
@@ -99,10 +107,18 @@ files:
|
|
99
107
|
- test/debug_as_trace_logger_test.rb
|
100
108
|
- test/formatters/color_test.rb
|
101
109
|
- test/formatters/default_test.rb
|
110
|
+
- test/formatters/one_line_test.rb
|
111
|
+
- test/formatters/signalfx_test.rb
|
112
|
+
- test/formatters_test.rb
|
113
|
+
- test/in_memory_appender.rb
|
114
|
+
- test/in_memory_appender_helper.rb
|
115
|
+
- test/in_memory_batch_appender.rb
|
116
|
+
- test/in_memory_metrics_appender.rb
|
102
117
|
- test/loggable_test.rb
|
103
118
|
- test/logger_test.rb
|
104
119
|
- test/measure_test.rb
|
105
|
-
- test/
|
120
|
+
- test/metric/new_relic_test.rb
|
121
|
+
- test/metric/signalfx_test.rb
|
106
122
|
- test/semantic_logger_test.rb
|
107
123
|
- test/test_helper.rb
|
108
124
|
homepage: https://github.com/rocketjob/semantic_logger
|
@@ -130,6 +146,8 @@ signing_key:
|
|
130
146
|
specification_version: 4
|
131
147
|
summary: Scalable, next generation enterprise logging for Ruby
|
132
148
|
test_files:
|
149
|
+
- test/appender/async_batch_test.rb
|
150
|
+
- test/appender/async_test.rb
|
133
151
|
- test/appender/bugsnag_test.rb
|
134
152
|
- test/appender/elasticsearch_http_test.rb
|
135
153
|
- test/appender/elasticsearch_test.rb
|
@@ -152,9 +170,17 @@ test_files:
|
|
152
170
|
- test/debug_as_trace_logger_test.rb
|
153
171
|
- test/formatters/color_test.rb
|
154
172
|
- test/formatters/default_test.rb
|
173
|
+
- test/formatters/one_line_test.rb
|
174
|
+
- test/formatters/signalfx_test.rb
|
175
|
+
- test/formatters_test.rb
|
176
|
+
- test/in_memory_appender.rb
|
177
|
+
- test/in_memory_appender_helper.rb
|
178
|
+
- test/in_memory_batch_appender.rb
|
179
|
+
- test/in_memory_metrics_appender.rb
|
155
180
|
- test/loggable_test.rb
|
156
181
|
- test/logger_test.rb
|
157
182
|
- test/measure_test.rb
|
158
|
-
- test/
|
183
|
+
- test/metric/new_relic_test.rb
|
184
|
+
- test/metric/signalfx_test.rb
|
159
185
|
- test/semantic_logger_test.rb
|
160
186
|
- test/test_helper.rb
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module SemanticLogger
|
2
|
-
module Metrics
|
3
|
-
class NewRelic < Subscriber
|
4
|
-
attr_accessor :prefix
|
5
|
-
|
6
|
-
# Parameters:
|
7
|
-
# :prefix [String]
|
8
|
-
# Prefix to add to every metric before forwarding to NewRelic
|
9
|
-
# Default: 'Custom'
|
10
|
-
def initialize(options = {})
|
11
|
-
options = options.dup
|
12
|
-
@prefix = options.delete(:prefix) || 'Custom'
|
13
|
-
raise(ArgumentError, "Unknown options: #{options.inspect}") if options.size > 0
|
14
|
-
end
|
15
|
-
|
16
|
-
def call(log)
|
17
|
-
metric = log.metric
|
18
|
-
# Add prefix for NewRelic
|
19
|
-
metric = "#{prefix}/#{metric}" unless metric.start_with?(prefix)
|
20
|
-
|
21
|
-
if duration = log.duration
|
22
|
-
# Convert duration to seconds
|
23
|
-
::NewRelic::Agent.record_metric(metric, duration / 1000.0)
|
24
|
-
else
|
25
|
-
::NewRelic::Agent.increment_metric(metric, log.metric_amount || 1)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|