on_strum-logs 0.1.1 → 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: 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: []