lumberjack 1.4.0 → 1.4.1

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: c72bca9355bd37fb691a06a4cea4a341b6905b7b5c15429d41061b2b0afd3813
4
- data.tar.gz: 49a18195fadf1de9b2cf43e3ce95c1f5e49d3d81dd4384a722e8f685187f6bbc
3
+ metadata.gz: 6acfd9c34a9d19b2f26a3fd759518c8d5ca13c6c80293ddb3e9fbe3f6adc164d
4
+ data.tar.gz: 130e62ac168101325ab00eaed172b5e91cb8d84cfe6ee826f6828e589a8f32e6
5
5
  SHA512:
6
- metadata.gz: 5d58e6244cad6396bf702759c05a130e279d4def0d7bee491817b373fbee79420fa0df776264485e7387657a7dd28bab7e4690b7b0a677d878b98f611432a7f7
7
- data.tar.gz: d2c2c8f1765230b39df298c68c89bad1db520acbaabfee7da7381d75336de91ff9c3f709e501683fb2502f6b5f7b61eef89c8814f13fda6c2235c3ac43ef5959
6
+ metadata.gz: 9a7c8bd6d9a31ffad48353c22e949bf5180f71df5bfe623386395c1620839036276b1a346e6d2d2ec4badedef8b1df485d9edbcb66518e8311d6d952d3caa466
7
+ data.tar.gz: 5440d08db3ea664f8cb17360c6efe34748ed85372e9caa5f796566efbb3a76978a665d13d2945740bde87d9075488bff08f1a8bc9afe0f05d709147c341ca047
data/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## 1.4.1
8
+
9
+ ### Changed
10
+
11
+ - Catch errors when formatting values so that it doesn't prevent logging. Otherwise there can be no way to log that the error occurred. Values that produced errors in the formatter will now be shown in the logs as "<Error formatting CLASS_NAME: ERROR_CLASS ERROR_MESSAGE>".
12
+
7
13
  ## 1.4.0
8
14
 
9
15
  ### Changed
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.0
1
+ 1.4.1
@@ -170,7 +170,14 @@ module Lumberjack
170
170
  def format(message)
171
171
  formatter = formatter_for(message.class)
172
172
  if formatter&.respond_to?(:call)
173
- formatter.call(message)
173
+ begin
174
+ formatter.call(message)
175
+ rescue SystemStackError, StandardError => e
176
+ error_message = e.class.name
177
+ error_message = "#{error_message} #{e.message}" if e.message && e.message != ""
178
+ warn("<Error formatting #{message.class.name}: #{error_message}>")
179
+ "<Error formatting #{message.class.name}: #{error_message}>"
180
+ end
174
181
  else
175
182
  message
176
183
  end
@@ -98,7 +98,9 @@ module Lumberjack
98
98
  tags_string
99
99
  end
100
100
 
101
- def compact_tags(tags)
101
+ def compact_tags(tags, seen = nil)
102
+ return {} if seen&.include?(tags.object_id)
103
+
102
104
  delete_keys = nil
103
105
  compacted_keys = nil
104
106
 
@@ -107,7 +109,9 @@ module Lumberjack
107
109
  delete_keys ||= []
108
110
  delete_keys << key
109
111
  elsif value.is_a?(Hash)
110
- compacted_value = compact_tags(value)
112
+ seen ||= Set.new
113
+ seen << tags.object_id
114
+ compacted_value = compact_tags(value, seen)
111
115
  if compacted_value.empty?
112
116
  delete_keys ||= []
113
117
  delete_keys << key
@@ -106,12 +106,12 @@ module Lumberjack
106
106
  return tags
107
107
  end
108
108
 
109
- formated_tags(tags)
109
+ formatted_tags(tags)
110
110
  end
111
111
 
112
112
  private
113
113
 
114
- def formated_tags(tags, skip_classes: nil, prefix: nil)
114
+ def formatted_tags(tags, skip_classes: nil, prefix: nil)
115
115
  formatted = {}
116
116
 
117
117
  tags.each do |name, value|
@@ -134,12 +134,19 @@ module Lumberjack
134
134
 
135
135
  formatter ||= @default_formatter
136
136
 
137
- formatted_value = if formatter.is_a?(Lumberjack::Formatter)
138
- formatter.format(value)
139
- elsif formatter.respond_to?(:call)
140
- formatter.call(value)
141
- else
142
- value
137
+ formatted_value = begin
138
+ if formatter.is_a?(Lumberjack::Formatter)
139
+ formatter.format(value)
140
+ elsif formatter.respond_to?(:call)
141
+ formatter.call(value)
142
+ else
143
+ value
144
+ end
145
+ rescue SystemStackError, StandardError => e
146
+ error_message = e.class.name
147
+ error_message = "#{error_message} #{e.message}" if e.message && e.message != ""
148
+ warn("<Error formatting #{value.class.name}: #{error_message}>")
149
+ "<Error formatting #{value.class.name}: #{error_message}>"
143
150
  end
144
151
 
145
152
  if formatted_value.is_a?(Enumerable)
@@ -148,7 +155,7 @@ module Lumberjack
148
155
  sub_prefix = "#{prefixed_name}."
149
156
 
150
157
  formatted_value = if formatted_value.is_a?(Hash)
151
- formated_tags(formatted_value, skip_classes: skip_classes, prefix: sub_prefix)
158
+ formatted_tags(formatted_value, skip_classes: skip_classes, prefix: sub_prefix)
152
159
  else
153
160
  formatted_value.collect do |item|
154
161
  formatted_tag_value(nil, item, skip_classes: skip_classes, prefix: sub_prefix)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lumberjack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Durand
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-08-02 00:00:00.000000000 Z
11
+ date: 2025-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler