@@ -26,6 +26,7 @@ def test_logging_works_with_many_loggers(sentry_init, capture_events, logger):
26
26
assert event ["level" ] == "fatal"
27
27
assert not event ["logentry" ]["params" ]
28
28
assert event ["logentry" ]["message" ] == "LOL"
29
+ assert event ["logentry" ]["formatted" ] == "LOL"
29
30
assert any (crumb ["message" ] == "bread" for crumb in event ["breadcrumbs" ]["values" ])
30
31
31
32
@@ -112,6 +113,7 @@ def test_logging_level(sentry_init, capture_events):
112
113
(event ,) = events
113
114
assert event ["level" ] == "error"
114
115
assert event ["logentry" ]["message" ] == "hi"
116
+ assert event ["logentry" ]["formatted" ] == "hi"
115
117
116
118
del events [:]
117
119
@@ -152,6 +154,7 @@ def test_custom_log_level_names(sentry_init, capture_events):
152
154
assert events
153
155
assert events [0 ]["level" ] == sentry_level
154
156
assert events [0 ]["logentry" ]["message" ] == "Trying level %s"
157
+ assert events [0 ]["logentry" ]["formatted" ] == f"Trying level { logging_level } "
155
158
assert events [0 ]["logentry" ]["params" ] == [logging_level ]
156
159
157
160
del events [:]
@@ -177,6 +180,7 @@ def filter(self, record):
177
180
178
181
(event ,) = events
179
182
assert event ["logentry" ]["message" ] == "hi"
183
+ assert event ["logentry" ]["formatted" ] == "hi"
180
184
181
185
182
186
def test_logging_captured_warnings (sentry_init , capture_events , recwarn ):
@@ -198,10 +202,16 @@ def test_logging_captured_warnings(sentry_init, capture_events, recwarn):
198
202
assert events [0 ]["level" ] == "warning"
199
203
# Captured warnings start with the path where the warning was raised
200
204
assert "UserWarning: first" in events [0 ]["logentry" ]["message" ]
205
+ assert "UserWarning: first" in events [0 ]["logentry" ]["formatted" ]
206
+ # For warnings, the message and formatted message are the same
207
+ assert events [0 ]["logentry" ]["message" ] == events [0 ]["logentry" ]["formatted" ]
201
208
assert events [0 ]["logentry" ]["params" ] == []
202
209
203
210
assert events [1 ]["level" ] == "warning"
204
211
assert "UserWarning: second" in events [1 ]["logentry" ]["message" ]
212
+ assert "UserWarning: second" in events [1 ]["logentry" ]["formatted" ]
213
+ # For warnings, the message and formatted message are the same
214
+ assert events [1 ]["logentry" ]["message" ] == events [1 ]["logentry" ]["formatted" ]
205
215
assert events [1 ]["logentry" ]["params" ] == []
206
216
207
217
# Using recwarn suppresses the "third" warning in the test output
@@ -234,6 +244,7 @@ def test_ignore_logger_wildcard(sentry_init, capture_events):
234
244
235
245
(event ,) = events
236
246
assert event ["logentry" ]["message" ] == "hi"
247
+ assert event ["logentry" ]["formatted" ] == "hi"
237
248
238
249
239
250
def test_logging_dictionary_interpolation (sentry_init , capture_events ):
@@ -245,6 +256,10 @@ def test_logging_dictionary_interpolation(sentry_init, capture_events):
245
256
246
257
(event ,) = events
247
258
assert event ["logentry" ]["message" ] == "this is a log with a dictionary %s"
259
+ assert (
260
+ event ["logentry" ]["formatted" ]
261
+ == "this is a log with a dictionary {'foo': 'bar'}"
262
+ )
248
263
assert event ["logentry" ]["params" ] == {"foo" : "bar" }
249
264
250
265
@@ -263,4 +278,8 @@ def test_logging_dictionary_args(sentry_init, capture_events):
263
278
event ["logentry" ]["message" ]
264
279
== "the value of foo is %(foo)s, and the value of bar is %(bar)s"
265
280
)
281
+ assert (
282
+ event ["logentry" ]["formatted" ]
283
+ == "the value of foo is bar, and the value of bar is baz"
284
+ )
266
285
assert event ["logentry" ]["params" ] == {"foo" : "bar" , "bar" : "baz" }
0 commit comments