lumberjack 1.4.0 → 1.4.2

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: 02eeeab48546eb4e180fbb933e3de684a77fea0c450589df6dd61ddcf2cb222f
4
+ data.tar.gz: b6e3f8e910101ca39422473da6aa83f1de2ee47fbb124319008f0abebfef30d0
5
5
  SHA512:
6
- metadata.gz: 5d58e6244cad6396bf702759c05a130e279d4def0d7bee491817b373fbee79420fa0df776264485e7387657a7dd28bab7e4690b7b0a677d878b98f611432a7f7
7
- data.tar.gz: d2c2c8f1765230b39df298c68c89bad1db520acbaabfee7da7381d75336de91ff9c3f709e501683fb2502f6b5f7b61eef89c8814f13fda6c2235c3ac43ef5959
6
+ metadata.gz: 28db09d28e5165583d07f41b08259223eca744ec51a5bf07a8dfcc9f6f457e6e8c31da9ccef79d71aa95db3e86c337e03f050c4f36dd6fc04f13c924669cd0db
7
+ data.tar.gz: 3f5d888d77f72b28ae3bf974e45d662c832a1148797955c4263e484825628231297deb18e12d3cc51c3b84555240cde2a63cacb1ff0b4a603950b550eeb7d3d8
data/CHANGELOG.md CHANGED
@@ -4,6 +4,18 @@ 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.2
8
+
9
+ ### Fixed
10
+
11
+ - Fixed issue where calling `Lumberjack::LogEntry#tag` would raise an error if there were no tags set on the log entry.
12
+
13
+ ## 1.4.1
14
+
15
+ ### Changed
16
+
17
+ - 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>".
18
+
7
19
  ## 1.4.0
8
20
 
9
21
  ### Changed
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.0
1
+ 1.4.2
@@ -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
@@ -68,6 +68,8 @@ module Lumberjack
68
68
  # @param name [String, Symbol] The tag name.
69
69
  # @return [Object, nil] The tag value or nil if the tag does not exist.
70
70
  def tag(name)
71
+ return nil if tags.nil?
72
+
71
73
  TagContext.new(tags)[name]
72
74
  end
73
75
 
@@ -98,7 +100,9 @@ module Lumberjack
98
100
  tags_string
99
101
  end
100
102
 
101
- def compact_tags(tags)
103
+ def compact_tags(tags, seen = nil)
104
+ return {} if seen&.include?(tags.object_id)
105
+
102
106
  delete_keys = nil
103
107
  compacted_keys = nil
104
108
 
@@ -107,7 +111,9 @@ module Lumberjack
107
111
  delete_keys ||= []
108
112
  delete_keys << key
109
113
  elsif value.is_a?(Hash)
110
- compacted_value = compact_tags(value)
114
+ seen ||= Set.new
115
+ seen << tags.object_id
116
+ compacted_value = compact_tags(value, seen)
111
117
  if compacted_value.empty?
112
118
  delete_keys ||= []
113
119
  delete_keys << key
@@ -718,16 +718,14 @@ module Lumberjack
718
718
  # Create a thread that will periodically call flush.
719
719
  def create_flusher_thread(flush_seconds) # :nodoc:
720
720
  if flush_seconds > 0
721
- begin
722
- logger = self
723
- Thread.new do
724
- until closed?
725
- begin
726
- sleep(flush_seconds)
727
- logger.flush if Time.now - logger.last_flushed_at >= flush_seconds
728
- rescue => e
729
- warn("Error flushing log: #{e.inspect}")
730
- end
721
+ logger = self
722
+ Thread.new do
723
+ until closed?
724
+ begin
725
+ sleep(flush_seconds)
726
+ logger.flush if Time.now - logger.last_flushed_at >= flush_seconds
727
+ rescue => e
728
+ warn("Error flushing log: #{e.inspect}")
731
729
  end
732
730
  end
733
731
  end
@@ -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.2
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-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler