Skip to content

Commit da50494

Browse files
authored
Merge pull request #14 from olivier-thatch/olivier-fix-message-lost
Fix issue where message is lost when logging hashes with multiple IO devices
2 parents d0ed30e + 73e4cd4 commit da50494

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

lib/logtail/logger.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,13 @@ def build_log_entry(severity, time, progname, logged_obj)
4141
tags: tags)
4242
elsif logged_obj.is_a?(Hash)
4343
# Extract the tags
44-
tags.push(logged_obj.delete(:tag)) if logged_obj.key?(:tag)
45-
tags.concat(logged_obj.delete(:tags)) if logged_obj.key?(:tags)
44+
tags.push(logged_obj[:tag]) if logged_obj.key?(:tag)
45+
tags.concat(logged_obj[:tags]) if logged_obj.key?(:tags)
4646
tags.uniq!
4747

48-
message = logged_obj.delete(:message)
48+
message = logged_obj[:message]
49+
50+
logged_obj = logged_obj.select { |k, _| ![:message, :tag, :tags].include?(k) }
4951

5052
LogEntry.new(level, time, progname, message, context_snapshot, logged_obj, tags: tags)
5153
else

spec/logtail/logger_spec.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,16 @@
7878
expect(io.string).to eq("")
7979
end
8080

81+
it "should not lose message when logging hashes with multiple io devices" do
82+
io1 = StringIO.new
83+
io2 = StringIO.new
84+
logger = Logtail::Logger.new(io1, io2)
85+
message = {message: "payment rejected", payment_rejected: {customer_id: "abcde1234", amount: 100}}
86+
logger.info(message)
87+
expect(io1.string).to include("payment rejected")
88+
expect(io2.string).to include("payment rejected")
89+
end
90+
8191
context "with the AugmentedFormatter" do
8292
before(:each) { logger.formatter = Logtail::Logger::AugmentedFormatter.new }
8393

0 commit comments

Comments
 (0)