on_strum-logs 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 707d72443b6cdcfb8fcdfda542d7f04ed7cc4d6e50db124463956e5f5a5fa949
4
- data.tar.gz: eaa1485b5dc0e96759cf14f676004d94dd3ffec176368277655e4d6c5d858837
3
+ metadata.gz: 99be5f9f716a2f741e7707f7452d25f2c93de108427156d162a840740c802210
4
+ data.tar.gz: bcfac9e566a8792d127a4c96d0a8c1e91462572095433bd13b85f102d5462653
5
5
  SHA512:
6
- metadata.gz: 07c7c79f133d3a073722e12d1a71a5a211a87d6602e5d0d63d2aa29a573f3a9f0d63c7052a70cbc17aeea295456b431b056b8a2c12a67b52eabd0b2360731065
7
- data.tar.gz: 31b8c66623c02f97afe291e6ec8ee5bf484e2e2bb217c016624d2a83cf4479df43e74d13ad3d20db1d38e420a9770d25b593901093ffe0b409b6a44b8e458827
6
+ metadata.gz: 91c6788b1bb58b0a5880219f6f65ce467e0c311d9aa77e94f2c211a72549ccdb82e20b476caf095173c036c88549c17c6ed5c194e235cf7784f30e7c27799d00
7
+ data.tar.gz: 0bde444c6e7be135857608604de67ae1cfcf30cbb1c9fb2029055f50ac0da4dc2628911cd356f336de9b0f79d0279f7237b6d1f64d2fefd7251aad8abc83b380
@@ -4,12 +4,24 @@ module OnStrum
4
4
  module Logs
5
5
  class Configuration
6
6
  INCOMPLETE_CONFIG = 'service_name, service_version are required parameters'
7
- SETTERS = %i[custom_formatter service_name service_version].freeze
7
+ SETTERS = %i[
8
+ custom_formatter
9
+ service_name
10
+ service_version
11
+ field_name_level
12
+ field_name_time
13
+ field_name_message
14
+ field_name_context
15
+ field_name_exception_message
16
+ field_name_exception_stack_trace
17
+ ].freeze
18
+ BUILTIN_FIELDS_DEFAULT_NAMES = %i[level time message context stack_trace].freeze
8
19
 
9
20
  attr_reader(*OnStrum::Logs::Configuration::SETTERS)
10
21
  attr_accessor :detailed_formatter
11
22
 
12
23
  def initialize(&block)
24
+ instance_initializer.each { |instace_variable, value| instance_variable_set(:"@#{instace_variable}", value) }
13
25
  tap(&block) if block
14
26
  end
15
27
 
@@ -28,12 +40,32 @@ module OnStrum
28
40
  custom_formatter || builded_formatter
29
41
  end
30
42
 
43
+ # TODO: hardcoded fields will be removed in next release
44
+ def log_attributes_order
45
+ @log_attributes_order ||= OnStrum::Logs::Configuration::SETTERS[3..6].map do |field_name_getter|
46
+ public_send(field_name_getter)
47
+ end + %i[service_name service_version]
48
+ end
49
+
31
50
  private
32
51
 
52
+ def instance_initializer
53
+ message_key = OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[2]
54
+ {
55
+ field_name_level: OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[0],
56
+ field_name_time: OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[1],
57
+ field_name_message: message_key,
58
+ field_name_context: OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[3],
59
+ field_name_exception_message: message_key,
60
+ field_name_exception_stack_trace: OnStrum::Logs::Configuration::BUILTIN_FIELDS_DEFAULT_NAMES[4]
61
+ }
62
+ end
63
+
33
64
  def valid_argument_type?(method_name, argument)
34
65
  argument.is_a?(
35
66
  case method_name
36
67
  when :service_name, :service_version then ::String
68
+ when *OnStrum::Logs::Configuration::SETTERS[3..-1] then ::Symbol
37
69
  when :custom_formatter then ::Class
38
70
  end
39
71
  )
@@ -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,7 +38,7 @@ module OnStrum
35
38
  def formatter
36
39
  @formatter ||= proc do |_severity, datetime, _progname, log_data|
37
40
  configuration.formatter.call(
38
- time: datetime,
41
+ configuration.field_name_time => datetime,
39
42
  service_name: configuration.service_name,
40
43
  service_version: configuration.service_version,
41
44
  **log_data
@@ -44,20 +47,22 @@ module OnStrum
44
47
  end
45
48
 
46
49
  def hash_normalizer(object)
50
+ message_key, context_key = configuration.field_name_message, configuration.field_name_context
51
+
47
52
  case object
48
53
  when ::Hash
49
- raise OnStrum::Logs::Error::Logger unless object.key?(:message)
54
+ raise OnStrum::Logs::Error::Logger unless object.key?(message_key)
50
55
 
51
- { message: object.delete(:message), context: (object.empty? ? nil : object) }
56
+ { message_key => object.delete(message_key), context_key => (object.empty? ? nil : object) }
52
57
  when ::Exception
53
58
  {
54
- message: "Exception: #{object.class}",
55
- context: {
56
- message: object.message,
57
- stack_trace: object.backtrace
59
+ message_key => "Exception: #{object.class}",
60
+ context_key => {
61
+ configuration.field_name_exception_message => object.message,
62
+ configuration.field_name_exception_stack_trace => object.backtrace
58
63
  }
59
64
  }
60
- else { message: object.to_s, context: nil }
65
+ else { message_key => object.to_s, context_key => nil }
61
66
  end
62
67
  end
63
68
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OnStrum
4
4
  module Logs
5
- VERSION = '0.2.0'
5
+ VERSION = '0.3.0'
6
6
  end
7
7
  end
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: 0.3.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-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: amazing_print