Skip to content

Commit f3d067a

Browse files
committed
Merge branch 'feat/DEX-2546/support-for-kafka-tags-in-ULS' into 'master'
[DEX-2546] feat: place logs in tags Closes DEX-2546 See merge request nstmrt/rubygems/sbmt-kafka_consumer!68
2 parents fffa614 + b4e81e5 commit f3d067a

File tree

5 files changed

+99
-25
lines changed

5 files changed

+99
-25
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1313

1414
### Fixed
1515

16+
## [3.2.0] - 2024-09-17
17+
18+
### Added
19+
20+
- For synchronous messages and errors, we place logs in tags
21+
1622
## [3.1.0] - 2024-09-09
1723

1824
### Fixed

lib/sbmt/kafka_consumer/base_consumer.rb

+1-3
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ def process_batch?
4545

4646
def with_instrumentation(message)
4747
logger.tagged(
48-
trace_id: trace_id,
49-
topic: message.metadata.topic, partition: message.metadata.partition,
50-
key: message.metadata.key, offset: message.metadata.offset
48+
trace_id: trace_id
5149
) do
5250
::Sbmt::KafkaConsumer.monitor.instrument(
5351
"consumer.consumed_one",

lib/sbmt/kafka_consumer/instrumentation/logger_listener.rb

+32-6
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,56 @@ def on_error_occurred(event)
2020

2121
logger.tagged(
2222
type: type,
23+
stacktrace: log_backtrace(error),
2324
**tags
2425
) do
2526
logger.error(error_message(error))
26-
log_backtrace(error)
2727
end
2828
end
2929

3030
# BaseConsumer events
3131
def on_consumer_consumed_one(event)
32-
logger.info("Successfully consumed message in #{event.payload[:time]} ms")
32+
log_with_tags(log_tags(event), "Successfully consumed message")
3333
end
3434

3535
def on_consumer_mark_as_consumed(event)
36-
logger.info("Processing message in #{event.payload[:time]} ms")
36+
log_with_tags(log_tags(event), "Processing message")
3737
end
3838

3939
def on_consumer_process_message(event)
40-
logger.info("Commit offset in #{event.payload[:time]} ms")
40+
log_with_tags(log_tags(event), "Commit offset")
4141
end
4242

4343
# InboxConsumer events
4444
def on_consumer_inbox_consumed_one(event)
45-
logger.tagged(status: event[:status]) do
46-
logger.info("Successfully consumed message with uuid: #{event[:message_uuid]} in #{event.payload[:time]} ms")
45+
log_tags = log_tags(event).merge!(status: event[:status])
46+
msg = "Successfully consumed message with uuid: #{event[:message_uuid]}"
47+
48+
log_with_tags(log_tags, msg)
49+
end
50+
51+
private
52+
53+
def log_tags(event)
54+
metadata = event.payload[:message].metadata
55+
56+
{
57+
kafka: {
58+
topic: metadata.topic,
59+
partition: metadata.partition,
60+
key: metadata.key,
61+
offset: metadata.offset,
62+
consumer_group: event.payload[:caller].topic.consumer_group.id,
63+
consume_duration_ms: event.payload[:time]
64+
}
65+
}
66+
end
67+
68+
def log_with_tags(log_tags, msg)
69+
return unless logger.respond_to?(:tagged)
70+
71+
logger.tagged(log_tags) do
72+
logger.send(:info, msg)
4773
end
4874
end
4975
end

lib/sbmt/kafka_consumer/version.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
module Sbmt
44
module KafkaConsumer
5-
VERSION = "3.1.0"
5+
VERSION = "3.2.0"
66
end
77
end

spec/sbmt/kafka_consumer/instrumentation/logger_listener_spec.rb

+59-15
Original file line numberDiff line numberDiff line change
@@ -3,51 +3,95 @@
33
require "rails_helper"
44

55
describe Sbmt::KafkaConsumer::Instrumentation::LoggerListener do
6-
let(:event) { double("event") }
7-
8-
let(:message) { double("message") }
9-
let(:metadata) { OpenStruct.new(topic: "topic", partition: 0) }
6+
let(:metadata) { OpenStruct.new(topic: "topic", partition: 0, key: "key", offset: 42) }
7+
let(:message) { double("message", metadata: metadata) }
8+
let(:caller) { double(topic: double(consumer_group: double(id: "group_id"))) }
9+
let(:event) { double("event", payload: {message: message, time: time, caller: caller}) }
1010

1111
let(:inbox_name) { "inbox" }
1212
let(:event_name) { "event" }
1313
let(:status) { "status" }
1414
let(:message_uuid) { "uuid" }
1515
let(:time) { 10.20 }
16+
let(:logger) { double("Logger") }
17+
let(:error) { StandardError.new("some error") }
18+
let(:error_message) { "some error message" }
19+
20+
before do
21+
allow(Sbmt::KafkaConsumer).to receive(:logger).and_return(logger)
22+
23+
allow_any_instance_of(described_class).to receive(:log_backtrace).and_return("some backtrace")
24+
allow_any_instance_of(described_class).to receive(:error_message).and_return(error_message)
25+
end
1626

1727
describe ".on_error_occurred" do
1828
it "logs error when consumer.base.consume_one event occurred" do
19-
expect(event).to receive(:[]).with(:error).and_return("some error")
20-
expect(event).to receive(:[]).with(:type).and_return("consumer.base.consume_one")
21-
expect(Rails.logger).to receive(:error)
29+
allow(event).to receive(:[]).with(:error).and_return(error)
30+
allow(event).to receive(:[]).with(:type).and_return("consumer.base.consume_one")
31+
32+
expect(logger).to receive(:tagged).with(hash_including(
33+
type: "consumer.base.consume_one",
34+
stacktrace: "some backtrace"
35+
)).and_yield
36+
37+
expect(logger).to receive(:error).with(error_message)
2238

2339
described_class.new.on_error_occurred(event)
2440
end
2541

2642
it "logs error when consumer.inbox.consume_one event occurred" do
27-
expect(event).to receive(:[]).with(:error).and_return("some error")
28-
expect(event).to receive(:[]).with(:type).and_return("consumer.inbox.consume_one")
29-
expect(event).to receive(:[]).with(:status).and_return(status)
30-
expect(Rails.logger).to receive(:error)
43+
allow(event).to receive(:[]).with(:error).and_return(error)
44+
allow(event).to receive(:[]).with(:type).and_return("consumer.inbox.consume_one")
45+
allow(event).to receive(:[]).with(:status).and_return(status)
46+
47+
expect(logger).to receive(:tagged).with(hash_including(
48+
type: "consumer.inbox.consume_one",
49+
status: "status",
50+
stacktrace: "some backtrace"
51+
)).and_yield
52+
53+
expect(logger).to receive(:error).with(error_message)
3154

3255
described_class.new.on_error_occurred(event)
3356
end
3457
end
3558

3659
describe ".on_consumer_consumed_one" do
3760
it "logs info message" do
38-
expect(event).to receive(:payload).and_return(time: time)
39-
expect(Rails.logger).to receive(:info)
61+
expect(logger).to receive(:tagged).with(hash_including(
62+
kafka: hash_including(
63+
topic: "topic",
64+
partition: 0,
65+
key: "key",
66+
offset: 42,
67+
consumer_group: "group_id",
68+
consume_duration_ms: time
69+
)
70+
)).and_yield
71+
72+
expect(logger).to receive(:info).with("Successfully consumed message")
4073

4174
described_class.new.on_consumer_consumed_one(event)
4275
end
4376
end
4477

4578
describe ".on_consumer_inbox_consumed_one" do
4679
it "logs info message" do
47-
expect(event).to receive(:payload).and_return(time: time)
4880
expect(event).to receive(:[]).with(:status).and_return(status)
4981
expect(event).to receive(:[]).with(:message_uuid).and_return(message_uuid)
50-
expect(Rails.logger).to receive(:info)
82+
83+
expect(logger).to receive(:tagged).with(hash_including(
84+
kafka: hash_including(
85+
topic: "topic",
86+
partition: 0,
87+
key: "key",
88+
offset: 42,
89+
consumer_group: "group_id",
90+
consume_duration_ms: time
91+
)
92+
)).and_yield
93+
94+
expect(logger).to receive(:info).with("Successfully consumed message with uuid: uuid")
5195

5296
described_class.new.on_consumer_inbox_consumed_one(event)
5397
end

0 commit comments

Comments
 (0)