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 +4 -4
- data/LICENSE.txt +1 -1
- data/lib/on_strum/logs/configuration.rb +34 -2
- data/lib/on_strum/logs/formatter/base.rb +1 -2
- data/lib/on_strum/logs/formatter/json.rb +4 -3
- data/lib/on_strum/logs/logger/default.rb +14 -9
- data/lib/on_strum/logs/version.rb +1 -1
- data/on_strum-logs.gemspec +4 -4
- metadata +8 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99be5f9f716a2f741e7707f7452d25f2c93de108427156d162a840740c802210
|
4
|
+
data.tar.gz: bcfac9e566a8792d127a4c96d0a8c1e91462572095433bd13b85f102d5462653
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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-
|
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[
|
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
|
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(
|
9
|
+
def self.call(**log_data)
|
10
|
+
time_key = OnStrum::Logs.configuration.field_name_time
|
10
11
|
json_log = arrange_attrs(
|
11
|
-
|
12
|
-
|
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(
|
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
|
-
|
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?(
|
54
|
+
raise OnStrum::Logs::Error::Logger unless object.key?(message_key)
|
50
55
|
|
51
|
-
{
|
56
|
+
{ message_key => object.delete(message_key), context_key => (object.empty? ? nil : object) }
|
52
57
|
when ::Exception
|
53
58
|
{
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
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 {
|
65
|
+
else { message_key => object.to_s, context_key => nil }
|
61
66
|
end
|
62
67
|
end
|
63
68
|
end
|
data/on_strum-logs.gemspec
CHANGED
@@ -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 = %(
|
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.
|
34
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
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.
|
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:
|
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.
|
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.
|
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.
|
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.
|
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:
|
134
|
+
summary: Simple structured logger
|
141
135
|
test_files: []
|