on_strum-logs 0.2.0 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 707d72443b6cdcfb8fcdfda542d7f04ed7cc4d6e50db124463956e5f5a5fa949
4
- data.tar.gz: eaa1485b5dc0e96759cf14f676004d94dd3ffec176368277655e4d6c5d858837
3
+ metadata.gz: 2ecbe6a25ee37ba18625810f3c21d555a0b5ae11a35883167438e4368576311e
4
+ data.tar.gz: d6604a0734775516a73bcc5a5ffbe63f9741cf86f40f69e5e2a6d3a3b47aba3b
5
5
  SHA512:
6
- metadata.gz: 07c7c79f133d3a073722e12d1a71a5a211a87d6602e5d0d63d2aa29a573f3a9f0d63c7052a70cbc17aeea295456b431b056b8a2c12a67b52eabd0b2360731065
7
- data.tar.gz: 31b8c66623c02f97afe291e6ec8ee5bf484e2e2bb217c016624d2a83cf4479df43e74d13ad3d20db1d38e420a9770d25b593901093ffe0b409b6a44b8e458827
6
+ metadata.gz: '01390b62cd01dd39b8f49d0cf3d60a5e557cc37b6ef3543274f49173d25e1bb4666a04d3c89bd018f1d65a727e7c394fe8326642b763843c9b9adcc753c59114'
7
+ data.tar.gz: 645e4a74b4130d79400a49d7b75d73fcebccbff71a7d80b7a45545e364a411836554c747949f5b6ecb52b34ce2c7380b08872694ad1b8e3fbf99e4aeb3323322
@@ -3,13 +3,23 @@
3
3
  module OnStrum
4
4
  module Logs
5
5
  class Configuration
6
- INCOMPLETE_CONFIG = 'service_name, service_version are required parameters'
7
- SETTERS = %i[custom_formatter service_name service_version].freeze
6
+ SETTERS = %i[
7
+ custom_formatter
8
+ root_fields
9
+ field_name_level
10
+ field_name_time
11
+ field_name_message
12
+ field_name_context
13
+ field_name_exception_message
14
+ field_name_exception_stack_trace
15
+ ].freeze
16
+ BUILTIN_FIELDS_DEFAULT_NAMES = %i[level time message context stack_trace].freeze
8
17
 
9
18
  attr_reader(*OnStrum::Logs::Configuration::SETTERS)
10
19
  attr_accessor :detailed_formatter
11
20
 
12
21
  def initialize(&block)
22
+ instance_initializer.each { |instace_variable, value| instance_variable_set(:"@#{instace_variable}", value) }
13
23
  tap(&block) if block
14
24
  end
15
25
 
@@ -20,21 +30,37 @@ module OnStrum
20
30
  end
21
31
  end
22
32
 
23
- def complete?
24
- !!(service_name && service_version)
25
- end
26
-
27
33
  def formatter
28
34
  custom_formatter || builded_formatter
29
35
  end
30
36
 
37
+ def log_attributes_order
38
+ @log_attributes_order ||= OnStrum::Logs::Configuration::SETTERS[2..5].map do |field_name_getter|
39
+ public_send(field_name_getter)
40
+ end + root_fields.keys
41
+ end
42
+
31
43
  private
32
44
 
45
+ def instance_initializer
46
+ message_key = OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[2]
47
+ {
48
+ root_fields: {},
49
+ field_name_level: OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[0],
50
+ field_name_time: OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[1],
51
+ field_name_message: message_key,
52
+ field_name_context: OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[3],
53
+ field_name_exception_message: message_key,
54
+ field_name_exception_stack_trace: OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[4]
55
+ }
56
+ end
57
+
33
58
  def valid_argument_type?(method_name, argument)
34
59
  argument.is_a?(
35
60
  case method_name
36
- when :service_name, :service_version then ::String
61
+ when *OnStrum::Logs::Configuration::SETTERS[2..-1] then ::Symbol
37
62
  when :custom_formatter then ::Class
63
+ when :root_fields then ::Hash
38
64
  end
39
65
  )
40
66
  end
@@ -5,10 +5,9 @@ module OnStrum
5
5
  module Formatter
6
6
  class Base
7
7
  DATETIME_FORMAT = '%FT%T.%3N%:z'
8
- LOG_ATTRIBUTES_ORDER = %i[level time message context service_name service_version].freeze
9
8
 
10
9
  def self.arrange_attrs(**log_data)
11
- OnStrum::Logs::Formatter::Base::LOG_ATTRIBUTES_ORDER.each_with_object({}) do |attribute, arranged_attrs|
10
+ OnStrum::Logs.configuration.log_attributes_order.each_with_object({}) do |attribute, arranged_attrs|
12
11
  arranged_attrs[attribute] = log_data[attribute]
13
12
  end
14
13
  end
@@ -6,10 +6,11 @@ module OnStrum
6
6
  class Json < Base
7
7
  require 'json'
8
8
 
9
- def self.call(time:, **log_data)
9
+ def self.call(**log_data)
10
+ time_key = OnStrum::Logs.configuration.field_name_time
10
11
  json_log = arrange_attrs(
11
- time: time.strftime(OnStrum::Logs::Formatter::Base::DATETIME_FORMAT),
12
- **log_data
12
+ **log_data,
13
+ time_key => log_data[time_key].strftime(OnStrum::Logs::Formatter::Base::DATETIME_FORMAT)
13
14
  ).to_json
14
15
 
15
16
  "#{json_log}\n"
@@ -20,7 +20,10 @@ module OnStrum
20
20
 
21
21
  # TODO: we need to have ability to process log data before render it to STDOUT/STDERR
22
22
  # hash_normalizer(arg); after_callback.call(arg)
23
- logger.public_send(method_name, hash_normalizer(arg).merge(level: method_name.to_s.upcase))
23
+ logger.public_send(
24
+ method_name,
25
+ hash_normalizer(arg).merge(configuration.field_name_level => method_name.to_s.upcase)
26
+ )
24
27
  end
25
28
  end
26
29
 
@@ -35,29 +38,30 @@ module OnStrum
35
38
  def formatter
36
39
  @formatter ||= proc do |_severity, datetime, _progname, log_data|
37
40
  configuration.formatter.call(
38
- time: datetime,
39
- service_name: configuration.service_name,
40
- service_version: configuration.service_version,
41
+ configuration.field_name_time => datetime,
42
+ **configuration.root_fields,
41
43
  **log_data
42
44
  )
43
45
  end
44
46
  end
45
47
 
46
48
  def hash_normalizer(object)
49
+ message_key, context_key = configuration.field_name_message, configuration.field_name_context
50
+
47
51
  case object
48
52
  when ::Hash
49
- raise OnStrum::Logs::Error::Logger unless object.key?(:message)
53
+ raise OnStrum::Logs::Error::Logger unless object.key?(message_key)
50
54
 
51
- { message: object.delete(:message), context: (object.empty? ? nil : object) }
55
+ { message_key => object.delete(message_key), context_key => (object.empty? ? nil : object) }
52
56
  when ::Exception
53
57
  {
54
- message: "Exception: #{object.class}",
55
- context: {
56
- message: object.message,
57
- stack_trace: object.backtrace
58
+ message_key => "Exception: #{object.class}",
59
+ context_key => {
60
+ configuration.field_name_exception_message => object.message,
61
+ configuration.field_name_exception_stack_trace => object.backtrace
58
62
  }
59
63
  }
60
- else { message: object.to_s, context: nil }
64
+ else { message_key => object.to_s, context_key => nil }
61
65
  end
62
66
  end
63
67
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OnStrum
4
4
  module Logs
5
- VERSION = '0.2.0'
5
+ VERSION = '1.0.0'
6
6
  end
7
7
  end
data/lib/on_strum/logs.rb CHANGED
@@ -9,10 +9,7 @@ module OnStrum
9
9
  @configuration ||= begin
10
10
  return unless block
11
11
 
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)
16
13
  end
17
14
  end
18
15
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: on_strum-logs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladislav Trotsenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-05 00:00:00.000000000 Z
11
+ date: 2024-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: amazing_print