Skip to content

Commit 21d4d57

Browse files
authored
2696 Respect log_level (#2709)
* Respect log_level * Update CHANGELOG
1 parent fefc3b8 commit 21d4d57

File tree

4 files changed

+165
-5
lines changed

4 files changed

+165
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
### Bug Fixes
44

55
- Skip including `sentry.message.template` in the log event attributes if there are no interpolation parameters provided ([#2700](https://github.com/getsentry/sentry-ruby/pull/2700))
6+
- Respect `log_level` when logging via `:std_lib_logger` patch ([#2709](https://github.com/getsentry/sentry-ruby/pull/2709))
67

78
## 5.27.0
89

sentry-rails/spec/isolated/rails_logger_patch_spec.rb

Lines changed: 91 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,23 @@
1515
RSpec.describe "Rails.logger with :logger patch" do
1616
include Sentry::TestHelper
1717

18-
# Set up a real Rails app with logger
19-
let(:log_output) { StringIO.new }
20-
let(:app) do
21-
make_basic_app do |config|
18+
let!(:app) do
19+
make_basic_app do |config, app|
2220
config.enable_logs = true
2321
config.enabled_patches = [:logger]
2422
config.max_log_events = 10
2523
config.sdk_logger = Logger.new(nil)
24+
25+
app.config.log_level = log_level
2626
end
2727
end
2828

29+
let(:log_level) { ::Logger::DEBUG }
30+
let(:log_output) { StringIO.new }
31+
2932
before do
30-
app
3133
Rails.logger = Logger.new(log_output)
34+
Rails.logger.level = log_level
3235
end
3336

3437
context "when :logger patch is enabled" do
@@ -115,6 +118,89 @@
115118
log_messages = sentry_logs.map { |log| log[:body] }
116119
expect(log_messages).to include("12345")
117120
end
121+
122+
context "when Rails logger level is configured to warn" do
123+
let(:log_level) { ::Logger::WARN }
124+
125+
it "does not send debug logs to Sentry when Rails logger level is warn" do
126+
expect {
127+
Rails.logger.debug("Debug message should not be sent")
128+
}.not_to output.to_stdout
129+
130+
Sentry.get_current_client.log_event_buffer.flush
131+
132+
log_messages = sentry_logs.map { |log| log[:body] }
133+
expect(log_messages).not_to include("Debug message should not be sent")
134+
end
135+
136+
it "does not send info logs to Sentry when Rails logger level is warn" do
137+
expect {
138+
Rails.logger.info("Info message should not be sent")
139+
}.not_to output.to_stdout
140+
141+
Sentry.get_current_client.log_event_buffer.flush
142+
143+
log_messages = sentry_logs.map { |log| log[:body] }
144+
expect(log_messages).not_to include("Info message should not be sent")
145+
end
146+
147+
it "sends warn logs to Sentry when Rails logger level is warn" do
148+
Rails.logger.warn("Warn message should be sent")
149+
150+
Sentry.get_current_client.log_event_buffer.flush
151+
152+
expect(sentry_logs).not_to be_empty
153+
154+
log_messages = sentry_logs.map { |log| log[:body] }
155+
expect(log_messages).to include("Warn message should be sent")
156+
157+
warn_log = sentry_logs.find { |log| log[:body] == "Warn message should be sent" }
158+
expect(warn_log[:level]).to eq("warn")
159+
end
160+
161+
it "sends error logs to Sentry when Rails logger level is warn" do
162+
Rails.logger.error("Error message should be sent")
163+
164+
Sentry.get_current_client.log_event_buffer.flush
165+
166+
expect(sentry_logs).not_to be_empty
167+
168+
log_messages = sentry_logs.map { |log| log[:body] }
169+
expect(log_messages).to include("Error message should be sent")
170+
171+
error_log = sentry_logs.find { |log| log[:body] == "Error message should be sent" }
172+
expect(error_log[:level]).to eq("error")
173+
end
174+
end
175+
176+
context "when Rails logger level is configured to error" do
177+
let(:log_level) { ::Logger::ERROR }
178+
179+
it "does not send warn logs to Sentry when Rails logger level is error" do
180+
expect {
181+
Rails.logger.warn("Warn message should not be sent")
182+
}.not_to output.to_stdout
183+
184+
Sentry.get_current_client.log_event_buffer.flush
185+
186+
log_messages = sentry_logs.map { |log| log[:body] }
187+
expect(log_messages).not_to include("Warn message should not be sent")
188+
end
189+
190+
it "sends error logs to Sentry when Rails logger level is error" do
191+
Rails.logger.error("Error message should be sent")
192+
193+
Sentry.get_current_client.log_event_buffer.flush
194+
195+
expect(sentry_logs).not_to be_empty
196+
197+
log_messages = sentry_logs.map { |log| log[:body] }
198+
expect(log_messages).to include("Error message should be sent")
199+
200+
error_log = sentry_logs.find { |log| log[:body] == "Error message should be sent" }
201+
expect(error_log[:level]).to eq("error")
202+
end
203+
end
118204
end
119205

120206
context "when Rails.logger is a BroadcastLogger", skip: !defined?(ActiveSupport::BroadcastLogger) do

sentry-ruby/lib/sentry/std_lib_logger.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ def add(severity, message = nil, progname = nil, &block)
1717

1818
return unless Sentry.initialized? && Sentry.get_current_hub
1919

20+
# Only process logs that meet or exceed the logger's level
21+
return result if severity < level
22+
2023
# exclude sentry SDK logs -- to prevent recursive log action,
2124
# do not process internal logs again
2225
if message.nil? && progname != Sentry::Logger::PROGNAME

sentry-ruby/spec/isolated/std_lib_logger_spec.rb

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,75 @@
6060
end
6161
end
6262
end
63+
64+
context "when logger level is set to warn" do
65+
before do
66+
logger.level = ::Logger::WARN
67+
end
68+
69+
it "should not send debug logs to Sentry when logger level is warn" do
70+
expect {
71+
logger.debug("Debug message")
72+
}.to_not output.to_stdout
73+
74+
expect(sentry_logs).to be_empty
75+
end
76+
77+
it "should not send info logs to Sentry when logger level is warn" do
78+
expect {
79+
logger.info("Info message")
80+
}.to_not output.to_stdout
81+
82+
expect(sentry_logs).to be_empty
83+
end
84+
85+
it "should send warn logs to Sentry when logger level is warn" do
86+
logger.warn("Warn message")
87+
88+
expect(sentry_logs).to_not be_empty
89+
log_event = sentry_logs.last
90+
expect(log_event[:level]).to eql("warn")
91+
expect(log_event[:body]).to eql("Warn message")
92+
end
93+
94+
it "should send error logs to Sentry when logger level is warn" do
95+
logger.error("Error message")
96+
97+
expect(sentry_logs).to_not be_empty
98+
log_event = sentry_logs.last
99+
expect(log_event[:level]).to eql("error")
100+
expect(log_event[:body]).to eql("Error message")
101+
end
102+
end
103+
104+
context "when logger level is set to error" do
105+
before do
106+
logger.level = ::Logger::ERROR
107+
end
108+
109+
it "should not send warn logs to Sentry when logger level is error" do
110+
logger.warn("Warn message")
111+
112+
expect(sentry_logs).to be_empty
113+
end
114+
115+
it "should send error logs to Sentry when logger level is error" do
116+
logger.error("Error message")
117+
118+
expect(sentry_logs).to_not be_empty
119+
log_event = sentry_logs.last
120+
expect(log_event[:level]).to eql("error")
121+
expect(log_event[:body]).to eql("Error message")
122+
end
123+
124+
it "should send fatal logs to Sentry when logger level is error" do
125+
logger.fatal("Fatal message")
126+
127+
expect(sentry_logs).to_not be_empty
128+
log_event = sentry_logs.last
129+
expect(log_event[:level]).to eql("fatal")
130+
expect(log_event[:body]).to eql("Fatal message")
131+
end
132+
end
63133
end
64134
end

0 commit comments

Comments
 (0)