inst-wide-logger 1.1.0 → 1.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/CHANGELOG.md +17 -0
- data/README.md +9 -1
- data/lib/wide_logger/dev_formatter.rb +37 -0
- data/lib/wide_logger/downgrading_to_debug_logger.rb +19 -0
- data/lib/wide_logger/version.rb +1 -1
- data/lib/wide_logger/wide_logger.rb +24 -5
- data/lib/wide_logger.rb +2 -1
- data/wide_logger.gemspec +1 -0
- metadata +18 -3
- data/lib/wide_logger/dev_json_formatter.rb +0 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3b9f2740d229c6b5e3a628f349d8674654046c56c646ee505474699f14b9f8fd
|
|
4
|
+
data.tar.gz: b1ddd213ae2cf6b2b05da1a7855435a96294ca6879c8e2d10fc175a3edfd1a4d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0f39db58281e6f7b4ba6379fad20b0f75150a3d8f53f20adefff61256a91842a792ba6823290ec1dc833f7a4cf60e70d813a97ae9bfe1fcbfcf1c05b53d9dd1f
|
|
7
|
+
data.tar.gz: fbdd690779e28f2bb8bf89182739d4114130689e04905078d089394e8641ddf01d88a71407759da107374d31d5ab1919f833a7db17d371ebdd6fa4045da5907e
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.3.0] - 2026-04-20
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `WideLogger::DevFormatter` with an `include_json:` constructor option (default `true`) to control whether the JSON context is appended to each log entry
|
|
8
|
+
|
|
9
|
+
### Deprecated
|
|
10
|
+
|
|
11
|
+
- `WideLogger::DevJsonFormatter` — use `WideLogger::DevFormatter` instead. The alias will be removed in 2.0.
|
|
12
|
+
|
|
13
|
+
## [1.2.0] - 2026-04-16
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- `WideLogger::DowngradingToDebugLogger` - a logger wrapper that downgrades log levels at or below a configurable threshold to `debug`
|
|
18
|
+
- Nested metadata interpolation in message templates using dot notation (e.g. `%<job.tag>s`)
|
|
19
|
+
|
|
3
20
|
## [1.1.0] - 2026-04-01
|
|
4
21
|
|
|
5
22
|
### Added
|
data/README.md
CHANGED
|
@@ -33,12 +33,20 @@ WideLogger.wrap(type: :web_request, metadata: { additional_context: @context })
|
|
|
33
33
|
end
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
Optionally, you can use WideLogger
|
|
36
|
+
Optionally, you can use `WideLogger::DevFormatter` to have log entries in the following format:
|
|
37
37
|
|
|
38
38
|
```text
|
|
39
39
|
<timestamp> <message> <context in JSON format>
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
The formatter accepts an `include_json:` keyword (default `true`). Set it to `false` to suppress the JSON context and emit only `<timestamp> <message>`:
|
|
43
|
+
|
|
44
|
+
```ruby
|
|
45
|
+
config.logging.formatter = WideLogger::DevFormatter.new(include_json: false)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
> `WideLogger::DevJsonFormatter` is kept as a deprecated alias of `DevFormatter` for backwards compatibility and will be removed in 2.0.
|
|
49
|
+
|
|
42
50
|
## Development
|
|
43
51
|
|
|
44
52
|
After checking out the repo, run `bundle install` to install dependencies. Then, run `rake spec` to run the tests.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'active_support/deprecation'
|
|
4
|
+
|
|
5
|
+
module WideLogger
|
|
6
|
+
class DevFormatter < PaulBunyan::JSONFormatter
|
|
7
|
+
def initialize(include_json: true)
|
|
8
|
+
super()
|
|
9
|
+
@include_json = include_json
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def call(severity, time, progname, msg)
|
|
13
|
+
prefix = time.utc.strftime(DATETIME_FORMAT) + ' ' + msg.to_s
|
|
14
|
+
return prefix + "\n" unless @include_json
|
|
15
|
+
|
|
16
|
+
prefix + ' ' + super
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def merge_metadata_and_message(metadata, message)
|
|
22
|
+
super.except('message', 'ts').sort_by { |key, _| key.to_s }.to_h
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
DEPRECATOR = ActiveSupport::Deprecation.new('2.0', 'WideLogger')
|
|
27
|
+
|
|
28
|
+
class DevJsonFormatter < DevFormatter
|
|
29
|
+
def initialize(*args, **kwargs)
|
|
30
|
+
DEPRECATOR.warn(
|
|
31
|
+
'WideLogger::DevJsonFormatter is deprecated and will be removed in 2.0. ' \
|
|
32
|
+
'Use WideLogger::DevFormatter instead.'
|
|
33
|
+
)
|
|
34
|
+
super
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'delegate'
|
|
4
|
+
|
|
5
|
+
module WideLogger
|
|
6
|
+
class DowngradingToDebugLogger < SimpleDelegator
|
|
7
|
+
LEVELS = %i[info warn error fatal unknown].freeze
|
|
8
|
+
|
|
9
|
+
def initialize(logger, threshold:)
|
|
10
|
+
super(logger)
|
|
11
|
+
threshold_index = LEVELS.index(threshold)
|
|
12
|
+
LEVELS[0..threshold_index].each do |level|
|
|
13
|
+
define_singleton_method(level) do |msg = nil, &block|
|
|
14
|
+
__getobj__.debug(msg, &block)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/lib/wide_logger/version.rb
CHANGED
|
@@ -7,6 +7,8 @@ module WideLogger
|
|
|
7
7
|
sqs: 'canonical_sqs_summary'
|
|
8
8
|
}.freeze
|
|
9
9
|
|
|
10
|
+
INTERPOLATION_PATTERN = /%(?:\{([^}]+)\}|<([^>]+)>([a-zA-Z]))/
|
|
11
|
+
|
|
10
12
|
WrapOptions = Struct.new(:metadata, :error_metadata, :message, keyword_init: true) do
|
|
11
13
|
def initialize(metadata: {}, error_metadata: {}, message: nil)
|
|
12
14
|
super
|
|
@@ -62,12 +64,29 @@ module WideLogger
|
|
|
62
64
|
def emit_event(event_type, message, error = nil)
|
|
63
65
|
if error
|
|
64
66
|
Rails.logger.error("#{event_type} failed with error: #{error.message}")
|
|
67
|
+
elsif message
|
|
68
|
+
Rails.logger.info(interpolate_message(message))
|
|
69
|
+
else
|
|
70
|
+
Rails.logger.info(event_type)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def interpolate_message(message)
|
|
75
|
+
metadata = Rails.logger.current_metadata
|
|
76
|
+
message.gsub(INTERPOLATION_PATTERN) do |match|
|
|
77
|
+
value = resolve_key(metadata, $1 || $2)
|
|
78
|
+
next match if value.nil?
|
|
79
|
+
|
|
80
|
+
$1 ? value.to_s : format("%#{$3}", value)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def resolve_key(metadata, key)
|
|
85
|
+
if key.include?('.')
|
|
86
|
+
keys = key.split('.').map(&:to_sym)
|
|
87
|
+
metadata.dig(*keys)
|
|
65
88
|
else
|
|
66
|
-
|
|
67
|
-
Rails.logger.info(message % Rails.logger.current_metadata)
|
|
68
|
-
else
|
|
69
|
-
Rails.logger.info(event_type)
|
|
70
|
-
end
|
|
89
|
+
metadata[key.to_sym]
|
|
71
90
|
end
|
|
72
91
|
end
|
|
73
92
|
end
|
data/lib/wide_logger.rb
CHANGED
|
@@ -3,5 +3,6 @@
|
|
|
3
3
|
require 'paul_bunyan'
|
|
4
4
|
require_relative 'wide_logger/version'
|
|
5
5
|
require_relative 'wide_logger/wide_logger'
|
|
6
|
-
require_relative 'wide_logger/
|
|
6
|
+
require_relative 'wide_logger/downgrading_to_debug_logger'
|
|
7
|
+
require_relative 'wide_logger/dev_formatter'
|
|
7
8
|
require_relative 'wide_logger/railtie' if defined?(Rails::Railtie)
|
data/wide_logger.gemspec
CHANGED
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
|
|
|
26
26
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
|
27
27
|
spec.require_paths = ['lib']
|
|
28
28
|
|
|
29
|
+
spec.add_dependency 'activesupport', '>= 6.0'
|
|
29
30
|
spec.add_dependency 'paul_bunyan', '~> 2.1'
|
|
30
31
|
spec.add_dependency 'railties', '>= 6.0'
|
|
31
32
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: inst-wide-logger
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Zoltan Hegedus
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-04-
|
|
11
|
+
date: 2026-04-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: activesupport
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '6.0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '6.0'
|
|
13
27
|
- !ruby/object:Gem::Dependency
|
|
14
28
|
name: paul_bunyan
|
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -53,7 +67,8 @@ files:
|
|
|
53
67
|
- Rakefile
|
|
54
68
|
- lib/inst-wide-logger.rb
|
|
55
69
|
- lib/wide_logger.rb
|
|
56
|
-
- lib/wide_logger/
|
|
70
|
+
- lib/wide_logger/dev_formatter.rb
|
|
71
|
+
- lib/wide_logger/downgrading_to_debug_logger.rb
|
|
57
72
|
- lib/wide_logger/railtie.rb
|
|
58
73
|
- lib/wide_logger/version.rb
|
|
59
74
|
- lib/wide_logger/wide_logger.rb
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module WideLogger
|
|
4
|
-
class DevJsonFormatter < PaulBunyan::JSONFormatter
|
|
5
|
-
def call(severity, time, progname, msg)
|
|
6
|
-
time.utc.strftime(DATETIME_FORMAT) + ' ' + msg.to_s + ' ' + super
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
private
|
|
10
|
-
|
|
11
|
-
def merge_metadata_and_message(metadata, message)
|
|
12
|
-
super.except('message', 'ts').sort_by { |key, _| key.to_s }.to_h
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|