loga 2.6.1 → 2.8.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/.circleci/config.yml +2 -9
- data/Appraisals +30 -12
- data/CHANGELOG.md +8 -0
- data/README.md +1 -1
- data/gemfiles/{rails32.gemfile → sidekiq60.gemfile} +2 -2
- data/gemfiles/{rails40.gemfile → sidekiq62.gemfile} +2 -2
- data/gemfiles/sidekiq63.gemfile +11 -0
- data/gemfiles/sidekiq64.gemfile +11 -0
- data/gemfiles/sidekiq65.gemfile +11 -0
- data/gemfiles/{sidekiq6.gemfile → sidekiq7.gemfile} +1 -1
- data/gemfiles/sidekiq70.gemfile +11 -0
- data/gemfiles/sidekiq71.gemfile +11 -0
- data/lib/loga/formatters/gelf_formatter.rb +13 -6
- data/lib/loga/sidekiq.rb +32 -9
- data/lib/loga/sidekiq7/job_logger.rb +51 -0
- data/lib/loga/version.rb +1 -1
- data/spec/integration/sidekiq60_spec.rb +180 -0
- data/spec/integration/sidekiq65_spec.rb +166 -0
- data/spec/integration/sidekiq7_spec.rb +193 -0
- data/spec/loga/sidekiq7/job_logger_spec.rb +125 -0
- data/spec/spec_helper.rb +23 -4
- data/spec/unit/loga/formatters/gelf_formatter_spec.rb +23 -0
- metadata +21 -11
- data/spec/fixtures/rails32.rb +0 -80
- data/spec/fixtures/rails40.rb +0 -80
- /data/spec/integration/{sidekiq6_spec.rb → sidekiq61_spec.rb} +0 -0
@@ -0,0 +1,166 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'timecop'
|
5
|
+
require 'fakeredis'
|
6
|
+
|
7
|
+
dummy_redis_config = ConnectionPool.new(size: 5) { Redis.new }
|
8
|
+
|
9
|
+
Sidekiq.configure_client do |config|
|
10
|
+
config.redis = dummy_redis_config
|
11
|
+
end
|
12
|
+
|
13
|
+
Sidekiq.configure_server do |config|
|
14
|
+
config.redis = dummy_redis_config
|
15
|
+
end
|
16
|
+
|
17
|
+
class MySidekiqWorker
|
18
|
+
include Sidekiq::Job
|
19
|
+
|
20
|
+
def perform(_name)
|
21
|
+
logger.info('Hello from MySidekiqWorker')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module Sidekiq
|
26
|
+
def self.reset!
|
27
|
+
@config = DEFAULTS.dup
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'Sidekiq client logger' do
|
32
|
+
let(:target) { StringIO.new }
|
33
|
+
let(:config) do
|
34
|
+
c = Sidekiq
|
35
|
+
|
36
|
+
c[:queues] = %w[default]
|
37
|
+
c[:fetch] = Sidekiq::BasicFetch.new(c)
|
38
|
+
c[:error_handlers] << Sidekiq.method(:default_error_handler)
|
39
|
+
|
40
|
+
c
|
41
|
+
end
|
42
|
+
|
43
|
+
def read_json_log(line:)
|
44
|
+
target.rewind
|
45
|
+
JSON.parse(target.each_line.drop(line - 1).first)
|
46
|
+
end
|
47
|
+
|
48
|
+
before do
|
49
|
+
Sidekiq.reset!
|
50
|
+
Sidekiq.redis(&:flushdb)
|
51
|
+
|
52
|
+
Loga.reset
|
53
|
+
|
54
|
+
Loga.configure(
|
55
|
+
service_name: 'hello_world_app',
|
56
|
+
service_version: '1.0',
|
57
|
+
device: target,
|
58
|
+
format: :gelf,
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'has the proper job logger' do
|
63
|
+
expect(Sidekiq.options[:job_logger]).to eq Loga::Sidekiq6::JobLogger
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'has the proper logger for Sidekiq.logger' do
|
67
|
+
expect(Sidekiq.logger).to eq Loga.logger
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'pushes a new element in the default queue' do
|
71
|
+
MySidekiqWorker.perform_async('Bob')
|
72
|
+
|
73
|
+
last_element = JSON.parse(Redis.current.lpop('queue:default'))
|
74
|
+
|
75
|
+
aggregate_failures do
|
76
|
+
expect(last_element['class']).to eq 'MySidekiqWorker'
|
77
|
+
expect(last_element['args']).to eq ['Bob']
|
78
|
+
expect(last_element['retry']).to eq true
|
79
|
+
expect(last_element['queue']).to eq 'default'
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_log_from_worker(json_line)
|
84
|
+
aggregate_failures do
|
85
|
+
expect(json_line).to include(
|
86
|
+
'_class' => 'MySidekiqWorker',
|
87
|
+
'_service.name' => 'hello_world_app',
|
88
|
+
'_service.version' => '1.0',
|
89
|
+
'_tags' => '',
|
90
|
+
'level' => 6,
|
91
|
+
'version' => '1.1',
|
92
|
+
'short_message' => 'Hello from MySidekiqWorker',
|
93
|
+
)
|
94
|
+
|
95
|
+
%w[_jid timestamp host].each do |key|
|
96
|
+
expect(json_line).to have_key(key)
|
97
|
+
end
|
98
|
+
|
99
|
+
expect(json_line).not_to include('_duration')
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_job_end_log(json_line) # rubocop:disable Metrics/MethodLength
|
104
|
+
aggregate_failures do
|
105
|
+
expect(json_line).to include(
|
106
|
+
'_queue' => 'default',
|
107
|
+
'_retry' => true,
|
108
|
+
'_params' => ['Bob'],
|
109
|
+
'_class' => 'MySidekiqWorker',
|
110
|
+
'_type' => 'sidekiq',
|
111
|
+
'_service.name' => 'hello_world_app',
|
112
|
+
'_service.version' => '1.0',
|
113
|
+
'_tags' => '',
|
114
|
+
'level' => 6,
|
115
|
+
'version' => '1.1',
|
116
|
+
)
|
117
|
+
|
118
|
+
%w[_created_at _enqueued_at _jid _duration timestamp host].each do |key|
|
119
|
+
expect(json_line).to have_key(key)
|
120
|
+
end
|
121
|
+
|
122
|
+
expect(json_line['_duration']).to be < 500
|
123
|
+
expect(json_line['short_message']).to match(/MySidekiqWorker with jid:*/)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
context 'with processor' do
|
128
|
+
let(:mutex) { Mutex.new }
|
129
|
+
let(:cond) { ConditionVariable.new }
|
130
|
+
|
131
|
+
def result(_processor, _exception)
|
132
|
+
mutex.synchronize { cond.signal }
|
133
|
+
end
|
134
|
+
|
135
|
+
def await(timeout: 0.5)
|
136
|
+
mutex.synchronize do
|
137
|
+
yield
|
138
|
+
cond.wait(mutex, timeout)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'logs the job processing event' do
|
143
|
+
MySidekiqWorker.perform_async('Bob')
|
144
|
+
|
145
|
+
require 'sidekiq/processor'
|
146
|
+
|
147
|
+
p = Sidekiq::Processor.new(config) { |pr, ex| result(pr, ex) }
|
148
|
+
|
149
|
+
await { p.start }
|
150
|
+
|
151
|
+
test_log_from_worker(read_json_log(line: 1))
|
152
|
+
test_job_end_log(read_json_log(line: 2))
|
153
|
+
|
154
|
+
# This was a bug - the duration was constantly incresing based on when
|
155
|
+
# the logger was created. https://github.com/FundingCircle/loga/pull/117
|
156
|
+
#
|
157
|
+
# Test that after sleeping for few seconds the duration is still under 500ms
|
158
|
+
sleep 1
|
159
|
+
|
160
|
+
await { MySidekiqWorker.perform_async('Bob') }
|
161
|
+
|
162
|
+
test_log_from_worker(read_json_log(line: 3))
|
163
|
+
test_job_end_log(read_json_log(line: 4))
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
@@ -0,0 +1,193 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'Sidekiq client logger' do
|
6
|
+
let(:target) { StringIO.new }
|
7
|
+
let(:config) { Sidekiq.instance_variable_get :@config }
|
8
|
+
|
9
|
+
before do
|
10
|
+
Sidekiq.configure_server do |config|
|
11
|
+
config.redis = { pool_name: :default }
|
12
|
+
end
|
13
|
+
|
14
|
+
Loga.reset
|
15
|
+
|
16
|
+
Loga.configure(
|
17
|
+
service_name: 'hello_world_app',
|
18
|
+
service_version: '1.0',
|
19
|
+
device: target,
|
20
|
+
format: :gelf,
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'has the proper job logger' do
|
25
|
+
expect(config[:job_logger]).to eq Loga::Sidekiq7::JobLogger
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'has the proper logger for Sidekiq.logger' do
|
29
|
+
expect(Sidekiq.logger).to eq Loga.logger
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'with processor' do
|
33
|
+
require 'sidekiq/processor'
|
34
|
+
|
35
|
+
let(:mutex) { Mutex.new }
|
36
|
+
let(:cond) { ConditionVariable.new }
|
37
|
+
let(:processor) do
|
38
|
+
Sidekiq::Processor.new(config.default_capsule) { |pr, ex| result(pr, ex) }
|
39
|
+
end
|
40
|
+
|
41
|
+
before do
|
42
|
+
@exception = nil
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'with a successful job' do
|
46
|
+
before do
|
47
|
+
MySidekiqWorker.perform_async('Bob')
|
48
|
+
|
49
|
+
await { processor.start }
|
50
|
+
|
51
|
+
processor.terminate(true)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'logs the job processing event' do
|
55
|
+
test_log_from_worker(read_json_log(line: -2))
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'logs the "done" event' do
|
59
|
+
test_job_end_log(read_json_log(line: -1))
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'with an error' do
|
64
|
+
before do
|
65
|
+
MySidekiqWorker.perform_async('Boom')
|
66
|
+
|
67
|
+
await { processor.start }
|
68
|
+
|
69
|
+
processor.terminate(true)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'logs the "error" event' do
|
73
|
+
test_job_fail_log(read_json_log(line: 0))
|
74
|
+
end
|
75
|
+
|
76
|
+
it 're-throws the error' do
|
77
|
+
# rubocop:disable RSpec/InstanceVariable
|
78
|
+
expect(@exception.message).to eq('Boom')
|
79
|
+
# rubocop:enable RSpec/InstanceVariable
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def result(_processor, exception)
|
84
|
+
@exception = exception
|
85
|
+
mutex.synchronize { cond.signal }
|
86
|
+
end
|
87
|
+
|
88
|
+
def await(timeout: 0.1)
|
89
|
+
mutex.synchronize do
|
90
|
+
yield
|
91
|
+
cond.wait(mutex, timeout)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def common_log_fields
|
96
|
+
{
|
97
|
+
'_class' => 'MySidekiqWorker',
|
98
|
+
'_service.name' => 'hello_world_app',
|
99
|
+
'_service.version' => '1.0',
|
100
|
+
'_tags' => '',
|
101
|
+
'version' => '1.1',
|
102
|
+
}.freeze
|
103
|
+
end
|
104
|
+
|
105
|
+
def job_logger_common_fields
|
106
|
+
common_log_fields.merge(
|
107
|
+
'_queue' => 'default',
|
108
|
+
'_retry' => true,
|
109
|
+
'_type' => 'sidekiq',
|
110
|
+
)
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_log_from_worker(json_line)
|
114
|
+
aggregate_failures do
|
115
|
+
expect(json_line).to include(
|
116
|
+
common_log_fields.merge(
|
117
|
+
'level' => 6,
|
118
|
+
'short_message' => 'Hello from MySidekiqWorker',
|
119
|
+
),
|
120
|
+
)
|
121
|
+
|
122
|
+
%w[_jid timestamp host].each do |key|
|
123
|
+
expect(json_line).to have_key(key)
|
124
|
+
end
|
125
|
+
|
126
|
+
expect(json_line).not_to include('_duration')
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_job_end_log(json_line)
|
131
|
+
aggregate_failures do
|
132
|
+
expect(json_line).to include(
|
133
|
+
job_logger_common_fields.merge(
|
134
|
+
'_params' => ['Bob'],
|
135
|
+
'level' => 6,
|
136
|
+
),
|
137
|
+
)
|
138
|
+
|
139
|
+
%w[_created_at _enqueued_at _jid _duration timestamp host].each do |key|
|
140
|
+
expect(json_line).to have_key(key)
|
141
|
+
end
|
142
|
+
|
143
|
+
expect(json_line['_duration']).to be < 500
|
144
|
+
expect(json_line['short_message'])
|
145
|
+
.to match(/MySidekiqWorker with jid: '\w+' done/)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_job_fail_log(json_line)
|
150
|
+
aggregate_failures do
|
151
|
+
expect(json_line).to include(
|
152
|
+
job_logger_common_fields.merge(
|
153
|
+
'_params' => ['Boom'],
|
154
|
+
'level' => 4,
|
155
|
+
),
|
156
|
+
)
|
157
|
+
|
158
|
+
%w[_created_at _enqueued_at _jid _duration timestamp host].each do |key|
|
159
|
+
expect(json_line).to have_key(key)
|
160
|
+
end
|
161
|
+
|
162
|
+
expect(json_line['_duration']).to be < 500
|
163
|
+
expect(json_line['short_message'])
|
164
|
+
.to match(/MySidekiqWorker with jid: '\w+' fail/)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
def dump_log
|
170
|
+
offset = target.pos
|
171
|
+
|
172
|
+
target.rewind
|
173
|
+
target.each_line { puts _1 }
|
174
|
+
|
175
|
+
target.pos = offset
|
176
|
+
end
|
177
|
+
|
178
|
+
def read_json_log(line:)
|
179
|
+
target.rewind
|
180
|
+
|
181
|
+
JSON.parse(target.readlines[line])
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
class MySidekiqWorker
|
186
|
+
include Sidekiq::Job
|
187
|
+
|
188
|
+
def perform(name)
|
189
|
+
raise name if name == 'Boom'
|
190
|
+
|
191
|
+
logger.info('Hello from MySidekiqWorker')
|
192
|
+
end
|
193
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'loga/sidekiq7/job_logger'
|
3
|
+
|
4
|
+
RSpec.describe Loga::Sidekiq7::JobLogger do
|
5
|
+
subject(:job_logger) { described_class.new(logger) }
|
6
|
+
|
7
|
+
let(:target) { StringIO.new }
|
8
|
+
|
9
|
+
let(:json_line) do
|
10
|
+
target.rewind
|
11
|
+
JSON.parse(target.read.split("\n").last)
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:logger) { Loga.logger }
|
15
|
+
|
16
|
+
before do
|
17
|
+
Loga.reset
|
18
|
+
|
19
|
+
Loga.configure(
|
20
|
+
service_name: 'hello_world_app',
|
21
|
+
service_version: '1.0',
|
22
|
+
device: target,
|
23
|
+
format: :gelf,
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
# https://github.com/mperham/sidekiq/blob/v6.1.2/lib/sidekiq/job_logger.rb
|
28
|
+
it 'inherits from ::Sidekiq::JobLogger' do
|
29
|
+
expect(subject).to be_a(::Sidekiq::JobLogger)
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#call' do
|
33
|
+
context 'when the job passess successfully' do
|
34
|
+
let(:item_data) do
|
35
|
+
{
|
36
|
+
'class' => 'HardWorker',
|
37
|
+
'args' => ['asd'],
|
38
|
+
'retry' => true,
|
39
|
+
'queue' => 'default',
|
40
|
+
'jid' => '591f6f66ee0d218fb451dfb6',
|
41
|
+
'created_at' => 1_528_799_582.904939,
|
42
|
+
'enqueued_at' => 1_528_799_582.9049861,
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'has the the required attributes on call' do
|
47
|
+
job_logger.call(item_data, 'queue') do
|
48
|
+
# something
|
49
|
+
end
|
50
|
+
|
51
|
+
expected_body = {
|
52
|
+
'version' => '1.1',
|
53
|
+
'level' => 6,
|
54
|
+
'_type' => 'sidekiq',
|
55
|
+
'_created_at' => 1_528_799_582.904939,
|
56
|
+
'_enqueued_at' => 1_528_799_582.9049861,
|
57
|
+
'_jid' => '591f6f66ee0d218fb451dfb6',
|
58
|
+
'_retry' => true,
|
59
|
+
'_queue' => 'default',
|
60
|
+
'_service.name' => 'hello_world_app',
|
61
|
+
'_class' => 'HardWorker',
|
62
|
+
'_service.version' => '1.0',
|
63
|
+
'_tags' => '',
|
64
|
+
'_params' => ['asd'],
|
65
|
+
}
|
66
|
+
|
67
|
+
aggregate_failures do
|
68
|
+
expect(json_line).to include(expected_body)
|
69
|
+
expect(json_line['_duration']).to be_a(Float)
|
70
|
+
expect(json_line['timestamp']).to be_a(Float)
|
71
|
+
expect(json_line['host']).to be_a(String)
|
72
|
+
expect(json_line['short_message']).to match(/HardWorker with jid:*/)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'when the job fails' do
|
78
|
+
let(:item_data) do
|
79
|
+
{
|
80
|
+
'class' => 'HardWorker',
|
81
|
+
'args' => ['asd'],
|
82
|
+
'retry' => true,
|
83
|
+
'queue' => 'default',
|
84
|
+
'jid' => '591f6f66ee0d218fb451dfb6',
|
85
|
+
'created_at' => 1_528_799_582.904939,
|
86
|
+
'enqueued_at' => 1_528_799_582.9049861,
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'has the the required attributes on call' do
|
91
|
+
failed_job = lambda do
|
92
|
+
job_logger.call(item_data, 'queue') do
|
93
|
+
raise StandardError
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
expected_body = {
|
98
|
+
'version' => '1.1',
|
99
|
+
'level' => 4,
|
100
|
+
'_type' => 'sidekiq',
|
101
|
+
'_created_at' => 1_528_799_582.904939,
|
102
|
+
'_enqueued_at' => 1_528_799_582.9049861,
|
103
|
+
'_jid' => '591f6f66ee0d218fb451dfb6',
|
104
|
+
'_retry' => true,
|
105
|
+
'_queue' => 'default',
|
106
|
+
'_service.name' => 'hello_world_app',
|
107
|
+
'_class' => 'HardWorker',
|
108
|
+
'_service.version' => '1.0',
|
109
|
+
'_tags' => '',
|
110
|
+
'_params' => ['asd'],
|
111
|
+
'_exception' => 'StandardError',
|
112
|
+
}
|
113
|
+
|
114
|
+
aggregate_failures do
|
115
|
+
expect(&failed_job).to raise_error(StandardError)
|
116
|
+
expect(json_line['_duration']).to be_a(Float)
|
117
|
+
expect(json_line).to include(expected_body)
|
118
|
+
expect(json_line['timestamp']).to be_a(Float)
|
119
|
+
expect(json_line['host']).to be_a(String)
|
120
|
+
expect(json_line['short_message']).to match(/HardWorker with jid:*/)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -30,21 +30,40 @@ when /unit/
|
|
30
30
|
rspec_pattern = 'unit/**/*_spec.rb'
|
31
31
|
require 'loga'
|
32
32
|
when /sidekiq(?<version>\d+)/
|
33
|
-
|
33
|
+
sidekiq_version = $LAST_MATCH_INFO['version']
|
34
|
+
case sidekiq_version
|
34
35
|
when '51'
|
35
36
|
rspec_pattern = [
|
36
37
|
'spec/integration/sidekiq5_spec.rb',
|
37
38
|
'spec/loga/sidekiq5/**/*_spec.rb',
|
38
39
|
'spec/loga/sidekiq_spec.rb',
|
39
40
|
].join(',')
|
40
|
-
when '
|
41
|
+
when '60'
|
41
42
|
rspec_pattern = [
|
42
|
-
'spec/integration/
|
43
|
+
'spec/integration/sidekiq60_spec.rb',
|
44
|
+
'spec/loga/sidekiq5/**/*_spec.rb',
|
45
|
+
'spec/loga/sidekiq_spec.rb',
|
46
|
+
].join(',')
|
47
|
+
when '61', '62', '63', '64'
|
48
|
+
rspec_pattern = [
|
49
|
+
'spec/integration/sidekiq61_spec.rb',
|
43
50
|
'spec/loga/sidekiq6/**/*_spec.rb',
|
44
51
|
'spec/loga/sidekiq_spec.rb',
|
45
52
|
].join(',')
|
53
|
+
when '65'
|
54
|
+
rspec_pattern = [
|
55
|
+
'spec/integration/sidekiq65_spec.rb',
|
56
|
+
'spec/loga/sidekiq6/**/*_spec.rb',
|
57
|
+
'spec/loga/sidekiq_spec.rb',
|
58
|
+
].join(',')
|
59
|
+
when '7', '70', '71'
|
60
|
+
rspec_pattern = [
|
61
|
+
'spec/integration/sidekiq7_spec.rb',
|
62
|
+
'spec/loga/sidekiq7/**/*_spec.rb',
|
63
|
+
'spec/loga/sidekiq_spec.rb',
|
64
|
+
].join(',')
|
46
65
|
else
|
47
|
-
raise
|
66
|
+
raise "FIXME: Unknown sidekiq #{sidekiq_version} - update this file."
|
48
67
|
end
|
49
68
|
|
50
69
|
require 'sidekiq'
|
@@ -209,6 +209,29 @@ describe Loga::Formatters::GELFFormatter do
|
|
209
209
|
end
|
210
210
|
end
|
211
211
|
|
212
|
+
context 'when working with additional fields via otel' do
|
213
|
+
let(:options) { { message: 'Wooden house' } }
|
214
|
+
let(:message) { Loga::Event.new(options) }
|
215
|
+
let(:trace_context) { { hex_trace_id: '123', hex_span_id: '456' } }
|
216
|
+
|
217
|
+
before do
|
218
|
+
klass = Class.new do
|
219
|
+
class << self
|
220
|
+
attr_accessor :current_span
|
221
|
+
end
|
222
|
+
end
|
223
|
+
klass.current_span = OpenStruct.new(context: OpenStruct.new(trace_context))
|
224
|
+
stub_const('::OpenTelemetry::Trace', klass)
|
225
|
+
end
|
226
|
+
|
227
|
+
it 'includes the trace_id and span_id' do
|
228
|
+
expect(json['_trace_id']).to eq('123')
|
229
|
+
expect(json['_span_id']).to eq('456')
|
230
|
+
end
|
231
|
+
|
232
|
+
include_examples 'valid GELF message'
|
233
|
+
end
|
234
|
+
|
212
235
|
{
|
213
236
|
'DEBUG' => 7,
|
214
237
|
'INFO' => 6,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loga
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Funding Circle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -254,8 +254,6 @@ files:
|
|
254
254
|
- LICENSE.txt
|
255
255
|
- README.md
|
256
256
|
- Rakefile
|
257
|
-
- gemfiles/rails32.gemfile
|
258
|
-
- gemfiles/rails40.gemfile
|
259
257
|
- gemfiles/rails42.gemfile
|
260
258
|
- gemfiles/rails50.gemfile
|
261
259
|
- gemfiles/rails52.gemfile
|
@@ -263,8 +261,15 @@ files:
|
|
263
261
|
- gemfiles/rails61.gemfile
|
264
262
|
- gemfiles/rails70.gemfile
|
265
263
|
- gemfiles/sidekiq51.gemfile
|
266
|
-
- gemfiles/
|
264
|
+
- gemfiles/sidekiq60.gemfile
|
267
265
|
- gemfiles/sidekiq61.gemfile
|
266
|
+
- gemfiles/sidekiq62.gemfile
|
267
|
+
- gemfiles/sidekiq63.gemfile
|
268
|
+
- gemfiles/sidekiq64.gemfile
|
269
|
+
- gemfiles/sidekiq65.gemfile
|
270
|
+
- gemfiles/sidekiq7.gemfile
|
271
|
+
- gemfiles/sidekiq70.gemfile
|
272
|
+
- gemfiles/sidekiq71.gemfile
|
268
273
|
- gemfiles/sinatra14.gemfile
|
269
274
|
- gemfiles/unit.gemfile
|
270
275
|
- lib/loga.rb
|
@@ -286,13 +291,12 @@ files:
|
|
286
291
|
- lib/loga/sidekiq.rb
|
287
292
|
- lib/loga/sidekiq5/job_logger.rb
|
288
293
|
- lib/loga/sidekiq6/job_logger.rb
|
294
|
+
- lib/loga/sidekiq7/job_logger.rb
|
289
295
|
- lib/loga/tagged_logging.rb
|
290
296
|
- lib/loga/utilities.rb
|
291
297
|
- lib/loga/version.rb
|
292
298
|
- loga.gemspec
|
293
299
|
- spec/fixtures/README.md
|
294
|
-
- spec/fixtures/rails32.rb
|
295
|
-
- spec/fixtures/rails40.rb
|
296
300
|
- spec/fixtures/rails42.rb
|
297
301
|
- spec/fixtures/rails50.rb
|
298
302
|
- spec/fixtures/rails52.rb
|
@@ -304,10 +308,14 @@ files:
|
|
304
308
|
- spec/integration/rails/railtie_spec.rb
|
305
309
|
- spec/integration/rails/request_spec.rb
|
306
310
|
- spec/integration/sidekiq5_spec.rb
|
307
|
-
- spec/integration/
|
311
|
+
- spec/integration/sidekiq60_spec.rb
|
312
|
+
- spec/integration/sidekiq61_spec.rb
|
313
|
+
- spec/integration/sidekiq65_spec.rb
|
314
|
+
- spec/integration/sidekiq7_spec.rb
|
308
315
|
- spec/integration/sinatra_spec.rb
|
309
316
|
- spec/loga/sidekiq5/job_logger_spec.rb
|
310
317
|
- spec/loga/sidekiq6/job_logger_spec.rb
|
318
|
+
- spec/loga/sidekiq7/job_logger_spec.rb
|
311
319
|
- spec/loga/sidekiq_spec.rb
|
312
320
|
- spec/spec_helper.rb
|
313
321
|
- spec/support/gethostname_shared.rb
|
@@ -350,8 +358,6 @@ specification_version: 4
|
|
350
358
|
summary: Facilitate log aggregation via unified logging
|
351
359
|
test_files:
|
352
360
|
- spec/fixtures/README.md
|
353
|
-
- spec/fixtures/rails32.rb
|
354
|
-
- spec/fixtures/rails40.rb
|
355
361
|
- spec/fixtures/rails42.rb
|
356
362
|
- spec/fixtures/rails50.rb
|
357
363
|
- spec/fixtures/rails52.rb
|
@@ -363,10 +369,14 @@ test_files:
|
|
363
369
|
- spec/integration/rails/railtie_spec.rb
|
364
370
|
- spec/integration/rails/request_spec.rb
|
365
371
|
- spec/integration/sidekiq5_spec.rb
|
366
|
-
- spec/integration/
|
372
|
+
- spec/integration/sidekiq60_spec.rb
|
373
|
+
- spec/integration/sidekiq61_spec.rb
|
374
|
+
- spec/integration/sidekiq65_spec.rb
|
375
|
+
- spec/integration/sidekiq7_spec.rb
|
367
376
|
- spec/integration/sinatra_spec.rb
|
368
377
|
- spec/loga/sidekiq5/job_logger_spec.rb
|
369
378
|
- spec/loga/sidekiq6/job_logger_spec.rb
|
379
|
+
- spec/loga/sidekiq7/job_logger_spec.rb
|
370
380
|
- spec/loga/sidekiq_spec.rb
|
371
381
|
- spec/spec_helper.rb
|
372
382
|
- spec/support/gethostname_shared.rb
|