on_strum-logs 0.1.1 → 0.3.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: 631e24b1bfbfe68706b9ff96ccb0a4db7275e73c4ef74ec33b395f4b26cefc7e
4
- data.tar.gz: e220ed192fac45ddb61c9faa49cc9981da28bec964eb259f79934141dfcdf2de
3
+ metadata.gz: 99be5f9f716a2f741e7707f7452d25f2c93de108427156d162a840740c802210
4
+ data.tar.gz: bcfac9e566a8792d127a4c96d0a8c1e91462572095433bd13b85f102d5462653
5
5
  SHA512:
6
- metadata.gz: 171bc63a8c00b0090ab194e909deae8df6430f007c7dd4ca8fad11b04a8b78f9d8fb6038bf7c112ad59caa731fc732af9214c9404fba114ccecb0c0290dea060
7
- data.tar.gz: 47814455011e5e03e4dc8385db18bc5ce16b42ca26e005c50e173082448b11a29e5c866716a3e5b21f0edc73c6ac2a3739dc766fdef83e2f97907551300eeb7d
6
+ metadata.gz: 91c6788b1bb58b0a5880219f6f65ce467e0c311d9aa77e94f2c211a72549ccdb82e20b476caf095173c036c88549c17c6ed5c194e235cf7784f30e7c27799d00
7
+ data.tar.gz: 0bde444c6e7be135857608604de67ae1cfcf30cbb1c9fb2029055f50ac0da4dc2628911cd356f336de9b0f79d0279f7237b6d1f64d2fefd7251aad8abc83b380
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2022-2023 onStrum and friends
3
+ Copyright (c) 2022-2024 onStrum and friends
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -4,17 +4,29 @@ 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
 
16
28
  OnStrum::Logs::Configuration::SETTERS.each do |method|
17
- define_method("#{method}=") do |argument|
29
+ define_method(:"#{method}=") do |argument|
18
30
  raise_unless(argument, __method__, valid_argument_type?(method, argument))
19
31
  instance_variable_set(:"@#{method}", argument)
20
32
  end
@@ -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.1.1'
5
+ VERSION = '0.3.0'
6
6
  end
7
7
  end
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ['Vladislav Trotsenko']
9
9
  spec.email = %w[admin@on-strum.org]
10
10
 
11
- spec.summary = %(on_strum-logs)
12
- spec.description = %(Simple structured logger)
11
+ spec.summary = %(Simple structured logger)
12
+ spec.description = %(Simple structured logger.)
13
13
 
14
14
  spec.homepage = 'https://github.com/on-strum/ruby-on-strum-logs'
15
15
  spec.license = 'MIT'
@@ -30,6 +30,6 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.add_development_dependency 'ffaker', '~> 2.21'
32
32
  spec.add_development_dependency 'json_matchers', '~> 0.11.1'
33
- spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
34
- spec.add_development_dependency 'rspec', '~> 3.12'
33
+ spec.add_development_dependency 'rake', '~> 13.1'
34
+ spec.add_development_dependency 'rspec', '~> 3.13'
35
35
  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.1.1
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: 2023-10-18 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
@@ -58,35 +58,29 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '13.0'
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- version: 13.0.6
61
+ version: '13.1'
65
62
  type: :development
66
63
  prerelease: false
67
64
  version_requirements: !ruby/object:Gem::Requirement
68
65
  requirements:
69
66
  - - "~>"
70
67
  - !ruby/object:Gem::Version
71
- version: '13.0'
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- version: 13.0.6
68
+ version: '13.1'
75
69
  - !ruby/object:Gem::Dependency
76
70
  name: rspec
77
71
  requirement: !ruby/object:Gem::Requirement
78
72
  requirements:
79
73
  - - "~>"
80
74
  - !ruby/object:Gem::Version
81
- version: '3.12'
75
+ version: '3.13'
82
76
  type: :development
83
77
  prerelease: false
84
78
  version_requirements: !ruby/object:Gem::Requirement
85
79
  requirements:
86
80
  - - "~>"
87
81
  - !ruby/object:Gem::Version
88
- version: '3.12'
89
- description: Simple structured logger
82
+ version: '3.13'
83
+ description: Simple structured logger.
90
84
  email:
91
85
  - admin@on-strum.org
92
86
  executables: []
@@ -137,5 +131,5 @@ requirements: []
137
131
  rubygems_version: 3.2.15
138
132
  signing_key:
139
133
  specification_version: 4
140
- summary: on_strum-logs
134
+ summary: Simple structured logger
141
135
  test_files: []