Skip to content

Commit c722592

Browse files
authored
Feature/Ability to define static fields in the logger document root (#23)
* Implemented ability to define static fields in the logger document root * Updated OnStrum::Logs::Configuration, tests * Updated OnStrum::Logs::Logger::Default, test * Updated OnStrum::Logs.configure, tests * Updated RSpec helpers * Updated gem documentation * Updated gem development dependencies * Updated codeclimate config
1 parent 51679a0 commit c722592

File tree

16 files changed

+65
-178
lines changed

16 files changed

+65
-178
lines changed

.circleci/gemspecs/latest

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ Gem::Specification.new do |spec|
2626
spec.add_development_dependency 'rake', '~> 13.1'
2727
spec.add_development_dependency 'reek', '~> 6.3'
2828
spec.add_development_dependency 'rspec', '~> 3.13'
29-
spec.add_development_dependency 'rubocop', '~> 1.61'
30-
spec.add_development_dependency 'rubocop-performance', '~> 1.20', '>= 1.20.2'
31-
spec.add_development_dependency 'rubocop-rspec', '~> 2.27', '>= 2.27.1'
29+
spec.add_development_dependency 'rubocop', '~> 1.62', '>= 1.62.1'
30+
spec.add_development_dependency 'rubocop-performance', '~> 1.21'
31+
spec.add_development_dependency 'rubocop-rspec', '= 2.27.1'
3232
spec.add_development_dependency 'simplecov', '~> 0.22.0'
3333
end

.codeclimate.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ checks:
99
plugins:
1010
rubocop:
1111
enabled: true
12-
channel: rubocop-1-61
12+
channel: rubocop-1-62
1313
config:
1414
file: .circleci/linter_configs/.rubocop.yml
1515

README.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,12 @@ To start working with this gem, you must configure it first as in the example be
7373
require 'on_strum/logs'
7474

7575
OnStrum::Logs.configure do |config|
76-
# Required parameter. Current service name.
77-
config.service_name = 'My Great Application'
78-
79-
# Required parameter. Current service version.
80-
config.service_version = '1.42.0'
76+
# Optional parameter. Ability to define static fields in the logger document root.
77+
# It is equal to empty hash by default.
78+
config.root_fields = {
79+
service_name: 'My Great Application',
80+
service_version: '1.42.0'
81+
}
8182

8283
# Optional parameter. The colorized structured log in STDOUT. It could be useful
8384
# for debug mode.
@@ -211,8 +212,10 @@ For view detailed colorized logs you can use configuration option `detailed_form
211212
require 'on_strum/logs'
212213

213214
OnStrum::Logs.configure do |config|
214-
config.service_name = 'My Great Application'
215-
config.service_version = '1.42.0'
215+
config.root_fields = {
216+
service_name: 'My Great Application',
217+
service_version: '1.42.0'
218+
}
216219
config.detailed_formatter = true
217220
end
218221

lib/on_strum/logs.rb

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@ def configuration(&block)
99
@configuration ||= begin
1010
return unless block
1111

12-
configuration = OnStrum::Logs::Configuration.new(&block)
13-
raise OnStrum::Logs::Error::Configuration, OnStrum::Logs::Configuration::INCOMPLETE_CONFIG unless configuration.complete?
14-
15-
configuration
12+
OnStrum::Logs::Configuration.new(&block)
1613
end
1714
end
1815

lib/on_strum/logs/configuration.rb

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@
33
module OnStrum
44
module Logs
55
class Configuration
6-
INCOMPLETE_CONFIG = 'service_name, service_version are required parameters'
76
SETTERS = %i[
87
custom_formatter
9-
service_name
10-
service_version
8+
root_fields
119
field_name_level
1210
field_name_time
1311
field_name_message
@@ -32,26 +30,22 @@ def initialize(&block)
3230
end
3331
end
3432

35-
def complete?
36-
!!(service_name && service_version)
37-
end
38-
3933
def formatter
4034
custom_formatter || builded_formatter
4135
end
4236

43-
# TODO: hardcoded fields will be removed in next release
4437
def log_attributes_order
45-
@log_attributes_order ||= OnStrum::Logs::Configuration::SETTERS[3..6].map do |field_name_getter|
38+
@log_attributes_order ||= OnStrum::Logs::Configuration::SETTERS[2..5].map do |field_name_getter|
4639
public_send(field_name_getter)
47-
end + %i[service_name service_version]
40+
end + root_fields.keys
4841
end
4942

5043
private
5144

5245
def instance_initializer
5346
message_key = OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[2]
5447
{
48+
root_fields: {},
5549
field_name_level: OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[0],
5650
field_name_time: OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[1],
5751
field_name_message: message_key,
@@ -64,9 +58,9 @@ def instance_initializer
6458
def valid_argument_type?(method_name, argument)
6559
argument.is_a?(
6660
case method_name
67-
when :service_name, :service_version then ::String
68-
when *OnStrum::Logs::Configuration::SETTERS[3..-1] then ::Symbol
61+
when *OnStrum::Logs::Configuration::SETTERS[2..-1] then ::Symbol
6962
when :custom_formatter then ::Class
63+
when :root_fields then ::Hash
7064
end
7165
)
7266
end

lib/on_strum/logs/logger/default.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ def formatter
3939
@formatter ||= proc do |_severity, datetime, _progname, log_data|
4040
configuration.formatter.call(
4141
configuration.field_name_time => datetime,
42-
service_name: configuration.service_name,
43-
service_version: configuration.service_version,
42+
**configuration.root_fields,
4443
**log_data
4544
)
4645
end

spec/on_strum/logs/configuration_spec.rb

Lines changed: 13 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@
22

33
RSpec.describe OnStrum::Logs::Configuration do
44
describe 'defined constants' do
5-
it { expect(described_class).to be_const_defined(:INCOMPLETE_CONFIG) }
65
it { expect(described_class).to be_const_defined(:SETTERS) }
76
it { expect(described_class).to be_const_defined(:BUILTIN_FIELDS_DEFAULT_NAMES) }
87
end
98

109
describe '.new' do
1110
let(:custom_formatter) { use_formatter(:custom) }
1211
let(:detailed_formatter) { true }
13-
let(:service_name) { random_service_name }
14-
let(:service_version) { random_semver }
12+
let(:root_fields) { random_root_fields }
1513
let(:field_name_level) { random_field_name }
1614
let(:field_name_time) { random_field_name }
1715
let(:field_name_message) { random_field_name }
@@ -24,8 +22,7 @@
2422
create_configuration(
2523
custom_formatter: custom_formatter,
2624
detailed_formatter: detailed_formatter,
27-
service_name: service_name,
28-
service_version: service_version,
25+
root_fields: root_fields,
2926
field_name_level: field_name_level,
3027
field_name_time: field_name_time,
3128
field_name_message: field_name_message,
@@ -38,15 +35,13 @@
3835
it 'creates configuration instance' do
3936
expect(configuration.custom_formatter).to eq(custom_formatter)
4037
expect(configuration.detailed_formatter).to eq(detailed_formatter)
41-
expect(configuration.service_name).to eq(service_name)
42-
expect(configuration.service_version).to eq(service_version)
38+
expect(configuration.root_fields).to eq(root_fields)
4339
expect(configuration.field_name_level).to eq(field_name_level)
4440
expect(configuration.field_name_time).to eq(field_name_time)
4541
expect(configuration.field_name_message).to eq(field_name_message)
4642
expect(configuration.field_name_context).to eq(field_name_context)
4743
expect(configuration.field_name_exception_message).to eq(field_name_exception_message)
4844
expect(configuration.field_name_exception_stack_trace).to eq(field_name_exception_stack_trace)
49-
expect(configuration).to be_complete
5045
end
5146
end
5247

@@ -62,49 +57,25 @@
6257

6358
let(:invalid_argument) { 42 }
6459

65-
context 'when argument service_name= invalid' do
66-
subject(:configuration) do
67-
create_configuration(service_name: invalid_argument, service_version: random_semver)
68-
end
69-
70-
let(:expected_error_message) { "#{invalid_argument} is not a valid service_name=" }
71-
72-
include_examples 'raies argument error'
73-
end
74-
75-
context 'when argument service_version= invalid' do
76-
subject(:configuration) do
77-
create_configuration(service_name: random_service_name, service_version: invalid_argument)
78-
end
60+
context 'when argument root_fields= invalid' do
61+
subject(:configuration) { create_configuration(root_fields: invalid_argument) }
7962

80-
let(:expected_error_message) { "#{invalid_argument} is not a valid service_version=" }
63+
let(:expected_error_message) { "#{invalid_argument} is not a valid root_fields=" }
8164

8265
include_examples 'raies argument error'
8366
end
8467

8568
context 'when argument custom_formatter= invalid' do
86-
subject(:configuration) do
87-
create_configuration(
88-
custom_formatter: invalid_argument,
89-
service_name: random_service_name,
90-
service_version: random_semver
91-
)
92-
end
69+
subject(:configuration) { create_configuration(custom_formatter: invalid_argument) }
9370

9471
let(:expected_error_message) { "#{invalid_argument} is not a valid custom_formatter=" }
9572

9673
include_examples 'raies argument error'
9774
end
9875

99-
OnStrum::Logs::Configuration::SETTERS[3..-1].each do |field_name_setter|
76+
OnStrum::Logs::Configuration::SETTERS[2..-1].each do |field_name_setter|
10077
context "when argument #{field_name_setter}= invalid" do
101-
subject(:configuration) do
102-
create_configuration(
103-
service_name: random_service_name,
104-
service_version: random_semver,
105-
field_name_setter => invalid_argument
106-
)
107-
end
78+
subject(:configuration) { create_configuration(field_name_setter => invalid_argument) }
10879

10980
let(:expected_error_message) { "#{invalid_argument} is not a valid #{field_name_setter}=" }
11081

@@ -117,8 +88,7 @@
11788
subject(:configuration) { create_configuration }
11889

11990
it 'returns incomplete configuration instance' do
120-
expect(configuration.service_name).to be_nil
121-
expect(configuration.service_version).to be_nil
91+
expect(configuration.root_fields).to be_empty
12292
expect(configuration.custom_formatter).to be_nil
12393
expect(configuration.field_name_level).to eq(:level)
12494
expect(configuration.field_name_time).to eq(:time)
@@ -127,36 +97,7 @@
12797
expect(configuration.field_name_exception_message).to eq(:message)
12898
expect(configuration.field_name_exception_stack_trace).to eq(:stack_trace)
12999
expect(configuration.detailed_formatter).to be_nil
130-
expect(configuration).not_to be_complete
131-
end
132-
end
133-
end
134-
135-
describe '#complete?' do
136-
context 'when required attributes missed' do
137-
shared_examples 'incomplete configuration' do
138-
it { expect(configuration).not_to be_complete }
139-
end
140-
141-
context 'when service_name is nil' do
142-
subject(:configuration) { create_configuration }
143-
144-
it_behaves_like 'incomplete configuration'
145-
end
146-
147-
context 'when service_version is nil' do
148-
subject(:configuration) { create_configuration(service_name: random_service_name) }
149-
150-
it_behaves_like 'incomplete configuration'
151-
end
152-
end
153-
154-
context 'when required attributes not missed' do
155-
subject(:configuration) do
156-
create_configuration(service_name: random_service_name, service_version: random_semver)
157100
end
158-
159-
it { expect(configuration).to be_complete }
160101
end
161102
end
162103

@@ -201,8 +142,10 @@
201142
describe '#log_attributes_order' do
202143
subject(:log_attributes_order) { configuration_instance.log_attributes_order }
203144

145+
let(:root_fields) { random_root_fields }
204146
let(:configuration_instance) do
205147
create_configuration(
148+
root_fields: root_fields,
206149
field_name_level: random_field_name,
207150
field_name_time: random_field_name,
208151
field_name_message: random_field_name,
@@ -217,8 +160,7 @@
217160
configuration_instance.field_name_time,
218161
configuration_instance.field_name_message,
219162
configuration_instance.field_name_context,
220-
:service_name,
221-
:service_version
163+
*root_fields.keys
222164
]
223165
)
224166
end

spec/on_strum/logs/formatter/detailed_spec.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,11 @@
1414
let(:time) { random_datetime }
1515
let(:message) { random_message }
1616
let(:context) { nil }
17-
let(:service_name) { random_service_name }
18-
let(:service_version) { random_semver }
17+
let(:root_fields) { random_root_fields }
1918
let(:log_data) do
2019
[
2120
[field_name_level, level],
22-
[:service_name, service_name],
23-
[:service_version, service_version],
21+
*root_fields.to_a,
2422
[field_name_time, time],
2523
[field_name_message, message],
2624
[field_name_context, context]
@@ -29,6 +27,7 @@
2927

3028
before do
3129
init_configuration(
30+
root_fields: root_fields,
3231
field_name_level: field_name_level,
3332
field_name_time: field_name_time,
3433
field_name_message: field_name_message,

spec/on_strum/logs/formatter/json_spec.rb

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,11 @@
1515
let(:time_formatted) { time.strftime(described_class::DATETIME_FORMAT) }
1616
let(:message) { random_message }
1717
let(:context) { nil }
18-
let(:service_name) { random_service_name }
19-
let(:service_version) { random_semver }
18+
let(:root_fields) { random_root_fields }
2019
let(:log_data) do
2120
[
2221
[field_name_level, level],
23-
[:service_name, service_name],
24-
[:service_version, service_version],
22+
*root_fields.to_a,
2523
[field_name_time, time],
2624
[field_name_message, message],
2725
[field_name_context, context]
@@ -30,6 +28,7 @@
3028

3129
before do
3230
init_configuration(
31+
root_fields: root_fields,
3332
field_name_level: field_name_level,
3433
field_name_time: field_name_time,
3534
field_name_message: field_name_message,
@@ -49,8 +48,7 @@
4948
field_name_time => time_formatted,
5049
field_name_message => message,
5150
field_name_context => context,
52-
service_name: service_name,
53-
service_version: service_version
51+
**root_fields
5452
}.to_json
5553
)
5654
)

spec/on_strum/logs/logger/default_spec.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@
3636
.with(
3737
time: time,
3838
level: method_name.to_s.upcase,
39-
service_name: current_configuration.service_name,
40-
service_version: current_configuration.service_version,
39+
**current_configuration.root_fields,
4140
**structured_log_data
4241
)
4342
logger

0 commit comments

Comments
 (0)