inst-wide-logger 1.0.1 → 1.1.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: 1330118e6a708256a1bf74fe82a977fb04b654066699afe8b07038849721de61
4
- data.tar.gz: 82793852255e6746b79f576ade3f9caecfaeac9548309d8b01d5ee1da32d0480
3
+ metadata.gz: 5d8e347b46de99e1474ad68d526f5f8666742c9bcd24a018a06ccf610b597e96
4
+ data.tar.gz: e7c08206a9747b4a5c0e8ae1cdf768eb45331f5ca12fdfbd18e92c8a6365337f
5
5
  SHA512:
6
- metadata.gz: a58d0ea1188b30dca8bbe3a146ad79888b7444bdf28da8631ee5e56e5d154afc45ed1d7530870bac1899b32ad1b1d85e8f1c3cf5de9fd665166121e91f6dfe4e
7
- data.tar.gz: 4b0e1389461f57b492f5041d20345841b18259788c0f760439dd2608f4c16e6f005922cbee2581873b872a36402a3a2e4d17593056c737d9908039086008b447
6
+ metadata.gz: ba10555e751477d537c1b9f115f02fcfa9402aaf13e90dae7a48f86b4a8eaed08f1889757da3f4f324f0f97a6705b22e4fc1e9b87ea31db7efdb19cc72bfb7e4
7
+ data.tar.gz: eff67e4ac3307bc48bb9260ffb589b86c3689e2807eea92c1af04d61b9ab0acacd1fbb1f6bb9a88f8e8f16a896d3d669fb02ce736af632a2af791f47d04dcc53
data/.rubocop.yml ADDED
@@ -0,0 +1,15 @@
1
+ Style/FormatStringToken:
2
+ Enabled: false
3
+
4
+ Metrics/BlockLength:
5
+ Exclude:
6
+ - 'spec/**/*'
7
+
8
+ Metrics/MethodLength:
9
+ Max: 15
10
+
11
+ Metrics/AbcSize:
12
+ Max: 18
13
+
14
+ Style/Documentation:
15
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.1.0] - 2026-04-01
4
+
5
+ ### Added
6
+
7
+ - `WideLogger::WrapOptions` struct for structured options (`metadata`, `error_metadata`, `message`)
8
+ - Message template support in `wrap` with `%{variable}` interpolation from logging context
9
+ - Error metadata support: additional metadata added to context only on exception
10
+ - Configurable default message templates per event type via `config.wide_logger.default_messages` or `WideLogger.default_messages`
11
+ - `railties` as a runtime dependency
12
+
13
+ ### Changed
14
+
15
+ - `WideLogger.wrap` now accepts `opts:` keyword argument (`WrapOptions`) instead of `metadata:`
16
+ - Event types are now configurable via Railtie (`config.wide_logger.event_types`) or `WideLogger.custom_event_types`
17
+
3
18
  ## [1.0.1] - 2026-04-01
4
19
 
5
20
  ### Added
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WideLogger
4
+ class Railtie < Rails::Railtie
5
+ config.wide_logger = ActiveSupport::OrderedOptions.new
6
+ config.wide_logger.event_types = {}
7
+ config.wide_logger.default_messages = {}
8
+
9
+ initializer 'wide_logger.configure' do |app|
10
+ WideLogger.custom_event_types = app.config.wide_logger.event_types
11
+ WideLogger.default_messages = app.config.wide_logger.default_messages
12
+ end
13
+ end
14
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WideLogger
4
- VERSION = "1.0.1"
4
+ VERSION = "1.1.0"
5
5
  end
@@ -1,27 +1,53 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WideLogger
4
- EVENT_TYPES = {
5
- web_request: 'canonical_request_summary',
4
+ DEFAULT_EVENT_TYPES = {
5
+ web_request: 'canonical_web_request_summary',
6
6
  job: 'canonical_job_summary',
7
7
  sqs: 'canonical_sqs_summary'
8
8
  }.freeze
9
9
 
10
+ WrapOptions = Struct.new(:metadata, :error_metadata, :message, keyword_init: true) do
11
+ def initialize(metadata: {}, error_metadata: {}, message: nil)
12
+ super
13
+ end
14
+ end
15
+
10
16
  class << self
11
- def wrap(type:, metadata: {})
12
- event_type = EVENT_TYPES.fetch(type)
17
+ def custom_event_types=(value)
18
+ @custom_event_types = value
19
+ @event_types = nil
20
+ end
21
+
22
+ def custom_event_types
23
+ @custom_event_types ||= {}
24
+ end
25
+
26
+ def event_types
27
+ @event_types ||= DEFAULT_EVENT_TYPES.merge(custom_event_types).freeze
28
+ end
29
+
30
+ attr_writer :default_messages
31
+
32
+ def default_messages
33
+ @default_messages ||= {}
34
+ end
35
+
36
+ def wrap(type:, opts: WrapOptions.new)
37
+ event_type = event_types.fetch(type)
13
38
 
14
39
  Rails.logger.add_metadata(
15
40
  log_event_type: event_type,
16
- **metadata
41
+ **opts.metadata
17
42
  )
18
43
 
19
44
  result = yield
20
45
 
21
- emit_event(event_type)
46
+ emit_event(event_type, opts.message || default_messages[type])
22
47
  result
23
48
  rescue StandardError => e
24
- emit_event(event_type, e)
49
+ Rails.logger.add_metadata(**opts.error_metadata) unless opts.error_metadata.empty?
50
+ emit_event(event_type, nil, e)
25
51
  raise
26
52
  ensure
27
53
  Rails.logger.clear_metadata!
@@ -33,11 +59,15 @@ module WideLogger
33
59
 
34
60
  private
35
61
 
36
- def emit_event(event_type, e = nil)
37
- if e
38
- Rails.logger.error("#{event_type} failed with error: #{e.message}")
62
+ def emit_event(event_type, message, error = nil)
63
+ if error
64
+ Rails.logger.error("#{event_type} failed with error: #{error.message}")
39
65
  else
40
- Rails.logger.info(event_type)
66
+ if message
67
+ Rails.logger.info(message % Rails.logger.current_metadata)
68
+ else
69
+ Rails.logger.info(event_type)
70
+ end
41
71
  end
42
72
  end
43
73
  end
data/lib/wide_logger.rb CHANGED
@@ -3,4 +3,5 @@
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/dev_json_formatter'
6
+ require_relative 'wide_logger/dev_json_formatter'
7
+ require_relative 'wide_logger/railtie' if defined?(Rails::Railtie)
data/wide_logger.gemspec CHANGED
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
27
27
  spec.require_paths = ['lib']
28
28
 
29
29
  spec.add_dependency 'paul_bunyan', '~> 2.1'
30
+ spec.add_dependency 'railties', '>= 6.0'
30
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inst-wide-logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.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-01 00:00:00.000000000 Z
11
+ date: 2026-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: paul_bunyan
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: railties
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '6.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '6.0'
27
41
  description:
28
42
  email:
29
43
  - zoltan.hegedus@instructure.com
@@ -32,6 +46,7 @@ extensions: []
32
46
  extra_rdoc_files: []
33
47
  files:
34
48
  - ".rspec"
49
+ - ".rubocop.yml"
35
50
  - CHANGELOG.md
36
51
  - Gemfile
37
52
  - README.md
@@ -39,6 +54,7 @@ files:
39
54
  - lib/inst-wide-logger.rb
40
55
  - lib/wide_logger.rb
41
56
  - lib/wide_logger/dev_json_formatter.rb
57
+ - lib/wide_logger/railtie.rb
42
58
  - lib/wide_logger/version.rb
43
59
  - lib/wide_logger/wide_logger.rb
44
60
  - wide_logger.gemspec