lumberjack 1.3.0 → 1.3.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: a69bd8640229dc5e150255f601f1280dfe4fb325cee8879aa202114cd335512f
4
- data.tar.gz: b2cd71293d94653f03ed04df094d69587d76e2b544d8a46149d139d7e952c0fc
3
+ metadata.gz: 9350195577ae682b1f668a183aed2c0e1635e2bad8abb9af751c9f11f4b33fee
4
+ data.tar.gz: 3ebedf23e6eb462df564030b332ee9fd0f71d9198d6276480405ca21ce28d3f6
5
5
  SHA512:
6
- metadata.gz: 484530ed54b537da178e956fc654ddcfc81fa74cfed495ba94ca04e1e350d1e29089198da6d77bb700cc227a5ee49949ac8d40c09c152e7e2ffc3ab7a7f6e7a5
7
- data.tar.gz: f0025936e20a24d8da09d2dd9cd863aaface259ce2b1b21eff590f7bbb22daa7fcd5a67f192c0abe428131ab145ab0cd271143ab01b7f6b665db69ebcb63becf
6
+ metadata.gz: 6c8230a0536fe98b8f817c275a5cc6e9d5764ea5dab8f0b1b92e1c274280c1528cebfb94767538eecf886240dc6a3fa6fe6adededffaac38815577bcfb739675
7
+ data.tar.gz: 3e64d451e6aa85298c3a5877bcfcef109381acd09553a250861886528ea352e5f5194db323cf0c253f2018dc130f4323f21ed1d51753cfcad7c3dbb09390affc
data/CHANGELOG.md CHANGED
@@ -4,6 +4,23 @@ 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.3.2
8
+
9
+ ### Fixed
10
+
11
+ - Fixed `NoMethodError` when setting the device via the `Lumberjack::Logger#device=` method.
12
+
13
+ ## 1.3.1
14
+
15
+ ### Added
16
+
17
+ - Added `Lumberjack::Logger#context` method to set up a context block for the logger. This is the same as calling `Lumberjack::Logger#tag` with an empty hash.
18
+ - Log entries now remove empty tag values so they don't have to be removed downstream.
19
+
20
+ ### Fixed
21
+
22
+ - ActiveSupport::TaggedLogger now calls `Lumberjack::Logger#tag_globally` to prevent deprecation warnings.
23
+
7
24
  ## 1.3.0
8
25
 
9
26
  ### Added
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.0
1
+ 1.3.2
@@ -26,9 +26,9 @@ module Lumberjack
26
26
  @progname = progname
27
27
  @pid = pid
28
28
  # backward compatibility with 1.0 API where the last argument was the unit of work id
29
- @tags = if tags.nil? || tags.is_a?(Hash)
30
- tags
31
- else
29
+ @tags = if tags.is_a?(Hash)
30
+ compact_tags(tags)
31
+ elsif !tags.nil?
32
32
  {UNIT_OF_WORK_ID => tags}
33
33
  end
34
34
  end
@@ -80,5 +80,37 @@ module Lumberjack
80
80
  tags&.each { |name, value| tags_string << " #{name}:#{value.inspect}" }
81
81
  tags_string
82
82
  end
83
+
84
+ def compact_tags(tags)
85
+ delete_keys = nil
86
+ compacted_keys = nil
87
+
88
+ tags.each do |key, value|
89
+ if value.nil? || value == ""
90
+ delete_keys ||= []
91
+ delete_keys << key
92
+ elsif value.is_a?(Hash)
93
+ compacted_value = compact_tags(value)
94
+ if compacted_value.empty?
95
+ delete_keys ||= []
96
+ delete_keys << key
97
+ elsif !value.equal?(compacted_value)
98
+ compacted_keys ||= []
99
+ compacted_keys << [key, compacted_value]
100
+ end
101
+ elsif value.is_a?(Array) && value.empty?
102
+ delete_keys ||= []
103
+ delete_keys << key
104
+ end
105
+ end
106
+
107
+ return tags if delete_keys.nil? && compacted_keys.nil?
108
+
109
+ tags = tags.dup
110
+ delete_keys&.each { |key| tags.delete(key) }
111
+ compacted_keys&.each { |key, value| tags[key] = value }
112
+
113
+ tags
114
+ end
83
115
  end
84
116
  end
@@ -96,9 +96,7 @@ module Lumberjack
96
96
  # @param [Lumberjack::Device] device The new logging device.
97
97
  # @return [void]
98
98
  def device=(device)
99
- @logdev = if device
100
- open_device(device, options)
101
- end
99
+ @logdev = device.nil? ? nil : open_device(device, {})
102
100
  end
103
101
 
104
102
  # Get the timestamp format on the device if it has one.
@@ -515,6 +513,15 @@ module Lumberjack
515
513
  end
516
514
  end
517
515
 
516
+ # Set up a context block for the logger. All tags added within the block will be cleared when
517
+ # the block exits.
518
+ #
519
+ def context(&block)
520
+ thread_tags = thread_local_value(:lumberjack_logger_tags)&.dup
521
+ thread_tags ||= {}
522
+ push_thread_local_value(:lumberjack_logger_tags, thread_tags, &block)
523
+ end
524
+
518
525
  # Add global tags to the logger that will appear on all log entries.
519
526
  #
520
527
  # @param [Hash] tags The tags to set.
@@ -38,19 +38,18 @@ module Lumberjack
38
38
  end
39
39
 
40
40
  # Compatibility with ActiveSupport::TaggedLogging which only supports adding tags as strings.
41
- # If a tag looks like "key:value" or "key=value", it will be added as a key value pair.
42
- # Otherwise it will be appended to a list named "tagged".
41
+ # Tags will be added to the "tagged" key in the logger's tags hash as an array.
43
42
  def tagged(*tags, &block)
44
- tag_hash = {}
45
- tags.flatten.each do |tag|
46
- tagged_values = Array(tag_hash["tagged"] || self.tags["tagged"])
47
- tag_hash["tagged"] = tagged_values + [tag]
43
+ tagged_values = Array(tag_value("tagged"))
44
+ flattened_tags = tags.flatten.collect(&:to_s).reject do |tag|
45
+ tag.respond_to?(:blank?) ? tag.blank? : tag.empty?
48
46
  end
47
+ tagged_values += flattened_tags unless flattened_tags.empty?
49
48
 
50
49
  if block || in_tag_context?
51
- tag(tag_hash, &block)
50
+ tag("tagged" => tagged_values, &block)
52
51
  else
53
- tag_globally(tag_hash)
52
+ tag_globally("tagged" => tagged_values)
54
53
  end
55
54
  end
56
55
 
@@ -59,13 +58,24 @@ module Lumberjack
59
58
  end
60
59
 
61
60
  def pop_tags(size = 1)
62
- tagged_values = Array(@tags["tagged"])
61
+ tagged_values = tag_value("tagged")
62
+ return unless tagged_values.is_a?(Array)
63
+
63
64
  tagged_values = ((tagged_values.size > size) ? tagged_values[0, tagged_values.size - size] : nil)
64
- tag("tagged" => tagged_values)
65
+
66
+ if in_tag_context?
67
+ tag("tagged" => tagged_values)
68
+ else
69
+ tag_globally("tagged" => tagged_values)
70
+ end
65
71
  end
66
72
 
67
73
  def clear_tags!
68
- tag("tagged" => nil)
74
+ if in_tag_context?
75
+ tag("tagged" => nil)
76
+ else
77
+ tag_globally("tagged" => nil)
78
+ end
69
79
  end
70
80
  end
71
81
  end
data/lumberjack.gemspec CHANGED
@@ -8,6 +8,12 @@ Gem::Specification.new do |spec|
8
8
  spec.homepage = "https://github.com/bdurand/lumberjack"
9
9
  spec.license = "MIT"
10
10
 
11
+ spec.metadata = {
12
+ "homepage_uri" => spec.homepage,
13
+ "source_code_uri" => spec.homepage,
14
+ "changelog_uri" => "#{spec.homepage}/blob/main/CHANGELOG.md"
15
+ }
16
+
11
17
  # Specify which files should be added to the gem when it is released.
12
18
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
13
19
  ignore_files = %w[
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.3.0
4
+ version: 1.3.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-07-19 00:00:00.000000000 Z
11
+ date: 2025-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -78,7 +78,10 @@ files:
78
78
  homepage: https://github.com/bdurand/lumberjack
79
79
  licenses:
80
80
  - MIT
81
- metadata: {}
81
+ metadata:
82
+ homepage_uri: https://github.com/bdurand/lumberjack
83
+ source_code_uri: https://github.com/bdurand/lumberjack
84
+ changelog_uri: https://github.com/bdurand/lumberjack/blob/main/CHANGELOG.md
82
85
  post_install_message:
83
86
  rdoc_options: []
84
87
  require_paths: