loga 2.8.1 → 2.9.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build-and-test.yml +4 -4
  3. data/.github/workflows/publish-gem.yml +1 -1
  4. data/.rubocop.yml +6 -11
  5. data/.rubocop_todo.yml +67 -8
  6. data/Appraisals +73 -24
  7. data/CHANGELOG.md +8 -0
  8. data/Gemfile +10 -8
  9. data/README.md +1 -1
  10. data/gemfiles/rails60.gemfile +10 -8
  11. data/gemfiles/rails61.gemfile +10 -8
  12. data/gemfiles/rails70.gemfile +11 -8
  13. data/gemfiles/rails71.gemfile +11 -8
  14. data/gemfiles/rails72.gemfile +38 -0
  15. data/gemfiles/rails80.gemfile +38 -0
  16. data/gemfiles/sidekiq51.gemfile +11 -8
  17. data/gemfiles/sidekiq60.gemfile +11 -8
  18. data/gemfiles/sidekiq61.gemfile +11 -8
  19. data/gemfiles/sidekiq62.gemfile +11 -8
  20. data/gemfiles/sidekiq63.gemfile +11 -8
  21. data/gemfiles/sidekiq64.gemfile +11 -8
  22. data/gemfiles/sidekiq65.gemfile +11 -8
  23. data/gemfiles/sidekiq70.gemfile +11 -8
  24. data/gemfiles/sidekiq71.gemfile +11 -8
  25. data/gemfiles/{sidekiq7.gemfile → sidekiq72.gemfile} +12 -9
  26. data/gemfiles/sidekiq73.gemfile +36 -0
  27. data/gemfiles/sidekiq80.gemfile +36 -0
  28. data/gemfiles/sinatra14.gemfile +11 -8
  29. data/gemfiles/sinatra2.gemfile +11 -8
  30. data/gemfiles/sinatra3.gemfile +11 -8
  31. data/gemfiles/sinatra4.gemfile +11 -8
  32. data/gemfiles/unit.gemfile +10 -8
  33. data/lib/loga/parameter_filter.rb +0 -2
  34. data/lib/loga/rack/request.rb +2 -2
  35. data/lib/loga/rack/request_id.rb +2 -2
  36. data/lib/loga/railtie.rb +1 -1
  37. data/lib/loga/sidekiq.rb +11 -0
  38. data/lib/loga/sidekiq8/job_logger.rb +13 -0
  39. data/lib/loga/tagged_logging.rb +2 -2
  40. data/lib/loga/version.rb +1 -1
  41. data/spec/fixtures/rails71.rb +1 -1
  42. data/spec/fixtures/rails72.rb +80 -0
  43. data/spec/fixtures/rails80.rb +80 -0
  44. data/spec/integration/sidekiq8_spec.rb +193 -0
  45. data/spec/integration/sinatra_spec.rb +10 -3
  46. data/spec/loga/sidekiq_latest/job_logger_spec.rb +138 -0
  47. data/spec/loga/sidekiq_spec.rb +15 -3
  48. data/spec/spec_helper.rb +8 -2
  49. data/spec/support/helpers.rb +8 -0
  50. data/spec/support/request_spec.rb +8 -1
  51. data/spec/unit/loga/formatters/gelf_formatter_spec.rb +7 -1
  52. data/spec/unit/loga/formatters/simple_formatter_spec.rb +20 -5
  53. metadata +17 -9
  54. data/spec/loga/sidekiq7/job_logger_spec.rb +0 -127
@@ -32,11 +32,23 @@ RSpec.describe Loga::Sidekiq do
32
32
 
33
33
  m = ENV['BUNDLE_GEMFILE'].match(/sidekiq(?<version>\d+)/)
34
34
 
35
+ job_logger =
36
+ if Sidekiq.respond_to?(:options)
37
+ Sidekiq.options[:job_logger]
38
+ else
39
+ sidekiq_config = Sidekiq.instance_variable_get(:@config)
40
+ sidekiq_config && sidekiq_config[:job_logger]
41
+ end
42
+
35
43
  case m['version']
36
44
  when '51'
37
- expect(Sidekiq.options[:job_logger]).to eq(Loga::Sidekiq5::JobLogger)
38
- when '6'
39
- expect(Sidekiq.options[:job_logger]).to eq(Loga::Sidekiq6::JobLogger)
45
+ expect(job_logger).to eq(Loga::Sidekiq5::JobLogger)
46
+ when '6', '60', '61', '62', '63', '64', '65'
47
+ expect(job_logger).to eq(Loga::Sidekiq6::JobLogger)
48
+ when '7', '70', '71', '72', '73'
49
+ expect(job_logger).to eq(Loga::Sidekiq7::JobLogger)
50
+ when '8', '80'
51
+ expect(job_logger).to eq(Loga::Sidekiq8::JobLogger)
40
52
  end
41
53
  end
42
54
  end
data/spec/spec_helper.rb CHANGED
@@ -59,10 +59,16 @@ when /sidekiq(?<version>\d+)/
59
59
  'spec/loga/sidekiq6/**/*_spec.rb',
60
60
  'spec/loga/sidekiq_spec.rb',
61
61
  ].join(',')
62
- when '7', '70', '71'
62
+ when '7', '70', '71', '72', '73'
63
63
  rspec_pattern = [
64
64
  'spec/integration/sidekiq7_spec.rb',
65
- 'spec/loga/sidekiq7/**/*_spec.rb',
65
+ 'spec/loga/sidekiq_latest/**/*_spec.rb',
66
+ 'spec/loga/sidekiq_spec.rb',
67
+ ].join(',')
68
+ when '8', '80'
69
+ rspec_pattern = [
70
+ 'spec/integration/sidekiq8_spec.rb',
71
+ 'spec/loga/sidekiq_latest/**/*_spec.rb',
66
72
  'spec/loga/sidekiq_spec.rb',
67
73
  ].join(',')
68
74
  else
@@ -18,4 +18,12 @@ module Helpers
18
18
  allow(loga).to receive(:logger).and_return(logger)
19
19
  loga
20
20
  end
21
+
22
+ def with_new_ruby(**data)
23
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.4')
24
+ data[:test]
25
+ else
26
+ data[:else]
27
+ end
28
+ end
21
29
  end
@@ -97,6 +97,13 @@ RSpec.shared_examples 'request logger' do
97
97
  { username: 'yoshi' },
98
98
  'HTTP_USER_AGENT' => 'Chrome', 'HTTP_X_REQUEST_ID' => '471a34dc'
99
99
 
100
+ method_missing_exception =
101
+ if Gem::Version.new(RUBY_VERSION) > Gem::Version.new('3.4.0dev')
102
+ "undefined method 'name' for nil"
103
+ else
104
+ "undefined method `name' for nil"
105
+ end
106
+
100
107
  expect(last_log_entry).to include(
101
108
  'version' => '1.1',
102
109
  'host' => 'bird.example.com',
@@ -115,7 +122,7 @@ RSpec.shared_examples 'request logger' do
115
122
  '_request.request_id' => '471a34dc',
116
123
  '_request.duration' => 0,
117
124
  '_exception.klass' => 'NoMethodError',
118
- '_exception.message' => start_with("undefined method `name' for nil"),
125
+ '_exception.message' => start_with(method_missing_exception),
119
126
  '_exception.backtrace' => be_a(String),
120
127
  '_tags' => '471a34dc TEST_TAG',
121
128
  )
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'spec_helper'
4
+ require 'ostruct'
4
5
 
5
6
  describe Loga::Formatters::GELFFormatter do
6
7
  subject { described_class.new(params) }
@@ -65,7 +66,12 @@ describe Loga::Formatters::GELFFormatter do
65
66
  let(:message) { { message: 'Wooden house' } }
66
67
 
67
68
  it 'the short_message is a String reprentation of that Hash' do
68
- expect(json['short_message']).to eq('{:message=>"Wooden house"}')
69
+ expect(json['short_message']).to eq(
70
+ with_new_ruby(
71
+ test: '{message: "Wooden house"}',
72
+ else: '{:message=>"Wooden house"}',
73
+ ),
74
+ )
69
75
  end
70
76
 
71
77
  include_examples 'valid GELF message'
@@ -3,7 +3,7 @@
3
3
  require 'spec_helper'
4
4
  require 'loga/formatters/simple_formatter'
5
5
 
6
- # rubocop:disable Metrics/LineLength
6
+ # rubocop:disable Layout/LineLength
7
7
  describe Loga::Formatters::SimpleFormatter do
8
8
  before { allow(Process).to receive(:pid).and_return(999) }
9
9
 
@@ -32,7 +32,12 @@ describe Loga::Formatters::SimpleFormatter do
32
32
  let(:message) { { record: 'Wooden house' } }
33
33
 
34
34
  specify do
35
- expect(subject).to eq("I, #{time_pid} {:record=>\"Wooden house\"}\n")
35
+ expect(subject).to eq(
36
+ with_new_ruby(
37
+ test: "I, #{time_pid} {record: \"Wooden house\"}\n",
38
+ else: "I, #{time_pid} {:record=>\"Wooden house\"}\n",
39
+ ),
40
+ )
36
41
  end
37
42
  end
38
43
 
@@ -80,7 +85,12 @@ describe Loga::Formatters::SimpleFormatter do
80
85
  end
81
86
 
82
87
  specify do
83
- expect(subject).to eq("I, #{time_pid} Hello World data={:admin=>true, :user=>{:email=>\"hello@world.com\"}}\n")
88
+ expect(subject).to eq(
89
+ with_new_ruby(
90
+ test: "I, #{time_pid} Hello World data={admin: true, user: {email: \"hello@world.com\"}}\n",
91
+ else: "I, #{time_pid} Hello World data={:admin=>true, :user=>{:email=>\"hello@world.com\"}}\n",
92
+ ),
93
+ )
84
94
  end
85
95
  end
86
96
 
@@ -94,7 +104,12 @@ describe Loga::Formatters::SimpleFormatter do
94
104
  end
95
105
 
96
106
  specify do
97
- expect(subject).to eq("I, #{time_pid} Hello World type=request data={:ssl=>true}\n")
107
+ expect(subject).to eq(
108
+ with_new_ruby(
109
+ test: "I, #{time_pid} Hello World type=request data={ssl: true}\n",
110
+ else: "I, #{time_pid} Hello World type=request data={:ssl=>true}\n",
111
+ ),
112
+ )
98
113
  end
99
114
  end
100
115
  end
@@ -129,4 +144,4 @@ describe Loga::Formatters::SimpleFormatter do
129
144
  end
130
145
  end
131
146
  end
132
- # rubocop:enable Metrics/LineLength
147
+ # rubocop:enable Layout/LineLength
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loga
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.1
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Funding Circle
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-02-13 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activesupport
@@ -65,6 +64,8 @@ files:
65
64
  - gemfiles/rails61.gemfile
66
65
  - gemfiles/rails70.gemfile
67
66
  - gemfiles/rails71.gemfile
67
+ - gemfiles/rails72.gemfile
68
+ - gemfiles/rails80.gemfile
68
69
  - gemfiles/sidekiq51.gemfile
69
70
  - gemfiles/sidekiq60.gemfile
70
71
  - gemfiles/sidekiq61.gemfile
@@ -72,9 +73,11 @@ files:
72
73
  - gemfiles/sidekiq63.gemfile
73
74
  - gemfiles/sidekiq64.gemfile
74
75
  - gemfiles/sidekiq65.gemfile
75
- - gemfiles/sidekiq7.gemfile
76
76
  - gemfiles/sidekiq70.gemfile
77
77
  - gemfiles/sidekiq71.gemfile
78
+ - gemfiles/sidekiq72.gemfile
79
+ - gemfiles/sidekiq73.gemfile
80
+ - gemfiles/sidekiq80.gemfile
78
81
  - gemfiles/sinatra14.gemfile
79
82
  - gemfiles/sinatra2.gemfile
80
83
  - gemfiles/sinatra3.gemfile
@@ -100,6 +103,7 @@ files:
100
103
  - lib/loga/sidekiq5/job_logger.rb
101
104
  - lib/loga/sidekiq6/job_logger.rb
102
105
  - lib/loga/sidekiq7/job_logger.rb
106
+ - lib/loga/sidekiq8/job_logger.rb
103
107
  - lib/loga/tagged_logging.rb
104
108
  - lib/loga/utilities.rb
105
109
  - lib/loga/version.rb
@@ -110,6 +114,8 @@ files:
110
114
  - spec/fixtures/rails61.rb
111
115
  - spec/fixtures/rails70.rb
112
116
  - spec/fixtures/rails71.rb
117
+ - spec/fixtures/rails72.rb
118
+ - spec/fixtures/rails80.rb
113
119
  - spec/fixtures/random_bin
114
120
  - spec/integration/rails/action_mailer_spec.rb
115
121
  - spec/integration/rails/railtie_spec.rb
@@ -119,10 +125,11 @@ files:
119
125
  - spec/integration/sidekiq61_spec.rb
120
126
  - spec/integration/sidekiq65_spec.rb
121
127
  - spec/integration/sidekiq7_spec.rb
128
+ - spec/integration/sidekiq8_spec.rb
122
129
  - spec/integration/sinatra_spec.rb
123
130
  - spec/loga/sidekiq5/job_logger_spec.rb
124
131
  - spec/loga/sidekiq6/job_logger_spec.rb
125
- - spec/loga/sidekiq7/job_logger_spec.rb
132
+ - spec/loga/sidekiq_latest/job_logger_spec.rb
126
133
  - spec/loga/sidekiq_spec.rb
127
134
  - spec/spec_helper.rb
128
135
  - spec/support/gethostname_shared.rb
@@ -144,7 +151,6 @@ homepage: https://github.com/FundingCircle/loga
144
151
  licenses:
145
152
  - BSD-3-Clause
146
153
  metadata: {}
147
- post_install_message:
148
154
  rdoc_options: []
149
155
  require_paths:
150
156
  - lib
@@ -159,8 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
165
  - !ruby/object:Gem::Version
160
166
  version: '0'
161
167
  requirements: []
162
- rubygems_version: 3.5.3
163
- signing_key:
168
+ rubygems_version: 3.6.9
164
169
  specification_version: 4
165
170
  summary: Facilitate log aggregation via unified logging
166
171
  test_files:
@@ -170,6 +175,8 @@ test_files:
170
175
  - spec/fixtures/rails61.rb
171
176
  - spec/fixtures/rails70.rb
172
177
  - spec/fixtures/rails71.rb
178
+ - spec/fixtures/rails72.rb
179
+ - spec/fixtures/rails80.rb
173
180
  - spec/fixtures/random_bin
174
181
  - spec/integration/rails/action_mailer_spec.rb
175
182
  - spec/integration/rails/railtie_spec.rb
@@ -179,10 +186,11 @@ test_files:
179
186
  - spec/integration/sidekiq61_spec.rb
180
187
  - spec/integration/sidekiq65_spec.rb
181
188
  - spec/integration/sidekiq7_spec.rb
189
+ - spec/integration/sidekiq8_spec.rb
182
190
  - spec/integration/sinatra_spec.rb
183
191
  - spec/loga/sidekiq5/job_logger_spec.rb
184
192
  - spec/loga/sidekiq6/job_logger_spec.rb
185
- - spec/loga/sidekiq7/job_logger_spec.rb
193
+ - spec/loga/sidekiq_latest/job_logger_spec.rb
186
194
  - spec/loga/sidekiq_spec.rb
187
195
  - spec/spec_helper.rb
188
196
  - spec/support/gethostname_shared.rb
@@ -1,127 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'loga/sidekiq7/job_logger'
5
-
6
- RSpec.describe Loga::Sidekiq7::JobLogger do
7
- subject(:job_logger) { described_class.new(logger) }
8
-
9
- let(:target) { StringIO.new }
10
-
11
- let(:json_line) do
12
- target.rewind
13
- JSON.parse(target.read.split("\n").last)
14
- end
15
-
16
- let(:logger) { Loga.logger }
17
-
18
- before do
19
- Loga.reset
20
-
21
- Loga.configure(
22
- service_name: 'hello_world_app',
23
- service_version: '1.0',
24
- device: target,
25
- format: :gelf,
26
- )
27
- end
28
-
29
- # https://github.com/mperham/sidekiq/blob/v6.1.2/lib/sidekiq/job_logger.rb
30
- it 'inherits from ::Sidekiq::JobLogger' do
31
- expect(subject).to be_a(Sidekiq::JobLogger)
32
- end
33
-
34
- describe '#call' do
35
- context 'when the job passess successfully' do
36
- let(:item_data) do
37
- {
38
- 'class' => 'HardWorker',
39
- 'args' => ['asd'],
40
- 'retry' => true,
41
- 'queue' => 'default',
42
- 'jid' => '591f6f66ee0d218fb451dfb6',
43
- 'created_at' => 1_528_799_582.904939,
44
- 'enqueued_at' => 1_528_799_582.9049861,
45
- }
46
- end
47
-
48
- it 'has the the required attributes on call' do
49
- job_logger.call(item_data, 'queue') do
50
- # something
51
- end
52
-
53
- expected_body = {
54
- 'version' => '1.1',
55
- 'level' => 6,
56
- '_type' => 'sidekiq',
57
- '_created_at' => 1_528_799_582.904939,
58
- '_enqueued_at' => 1_528_799_582.9049861,
59
- '_jid' => '591f6f66ee0d218fb451dfb6',
60
- '_retry' => true,
61
- '_queue' => 'default',
62
- '_service.name' => 'hello_world_app',
63
- '_class' => 'HardWorker',
64
- '_service.version' => '1.0',
65
- '_tags' => '',
66
- '_params' => ['asd'],
67
- }
68
-
69
- aggregate_failures do
70
- expect(json_line).to include(expected_body)
71
- expect(json_line['_duration']).to be_a(Float)
72
- expect(json_line['timestamp']).to be_a(Float)
73
- expect(json_line['host']).to be_a(String)
74
- expect(json_line['short_message']).to match(/HardWorker with jid:*/)
75
- end
76
- end
77
- end
78
-
79
- context 'when the job fails' do
80
- let(:item_data) do
81
- {
82
- 'class' => 'HardWorker',
83
- 'args' => ['asd'],
84
- 'retry' => true,
85
- 'queue' => 'default',
86
- 'jid' => '591f6f66ee0d218fb451dfb6',
87
- 'created_at' => 1_528_799_582.904939,
88
- 'enqueued_at' => 1_528_799_582.9049861,
89
- }
90
- end
91
-
92
- it 'has the the required attributes on call' do
93
- failed_job = lambda do
94
- job_logger.call(item_data, 'queue') do
95
- raise StandardError
96
- end
97
- end
98
-
99
- expected_body = {
100
- 'version' => '1.1',
101
- 'level' => 4,
102
- '_type' => 'sidekiq',
103
- '_created_at' => 1_528_799_582.904939,
104
- '_enqueued_at' => 1_528_799_582.9049861,
105
- '_jid' => '591f6f66ee0d218fb451dfb6',
106
- '_retry' => true,
107
- '_queue' => 'default',
108
- '_service.name' => 'hello_world_app',
109
- '_class' => 'HardWorker',
110
- '_service.version' => '1.0',
111
- '_tags' => '',
112
- '_params' => ['asd'],
113
- '_exception' => 'StandardError',
114
- }
115
-
116
- aggregate_failures do
117
- expect(&failed_job).to raise_error(StandardError)
118
- expect(json_line['_duration']).to be_a(Float)
119
- expect(json_line).to include(expected_body)
120
- expect(json_line['timestamp']).to be_a(Float)
121
- expect(json_line['host']).to be_a(String)
122
- expect(json_line['short_message']).to match(/HardWorker with jid:*/)
123
- end
124
- end
125
- end
126
- end
127
- end