@@ -26,6 +26,7 @@ def test_logging_works_with_many_loggers(sentry_init, capture_events, logger):
2626 assert event ["level" ] == "fatal"
2727 assert not event ["logentry" ]["params" ]
2828 assert event ["logentry" ]["message" ] == "LOL"
29+ assert event ["logentry" ]["formatted" ] == "LOL"
2930 assert any (crumb ["message" ] == "bread" for crumb in event ["breadcrumbs" ]["values" ])
3031
3132
@@ -112,6 +113,7 @@ def test_logging_level(sentry_init, capture_events):
112113 (event ,) = events
113114 assert event ["level" ] == "error"
114115 assert event ["logentry" ]["message" ] == "hi"
116+ assert event ["logentry" ]["formatted" ] == "hi"
115117
116118 del events [:]
117119
@@ -152,6 +154,7 @@ def test_custom_log_level_names(sentry_init, capture_events):
152154 assert events
153155 assert events [0 ]["level" ] == sentry_level
154156 assert events [0 ]["logentry" ]["message" ] == "Trying level %s"
157+ assert events [0 ]["logentry" ]["formatted" ] == f"Trying level { logging_level } "
155158 assert events [0 ]["logentry" ]["params" ] == [logging_level ]
156159
157160 del events [:]
@@ -177,6 +180,7 @@ def filter(self, record):
177180
178181 (event ,) = events
179182 assert event ["logentry" ]["message" ] == "hi"
183+ assert event ["logentry" ]["formatted" ] == "hi"
180184
181185
182186def test_logging_captured_warnings (sentry_init , capture_events , recwarn ):
@@ -198,10 +202,16 @@ def test_logging_captured_warnings(sentry_init, capture_events, recwarn):
198202 assert events [0 ]["level" ] == "warning"
199203 # Captured warnings start with the path where the warning was raised
200204 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" ]
201208 assert events [0 ]["logentry" ]["params" ] == []
202209
203210 assert events [1 ]["level" ] == "warning"
204211 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" ]
205215 assert events [1 ]["logentry" ]["params" ] == []
206216
207217 # Using recwarn suppresses the "third" warning in the test output
@@ -234,3 +244,42 @@ def test_ignore_logger_wildcard(sentry_init, capture_events):
234244
235245 (event ,) = events
236246 assert event ["logentry" ]["message" ] == "hi"
247+ assert event ["logentry" ]["formatted" ] == "hi"
248+
249+
250+ def test_logging_dictionary_interpolation (sentry_init , capture_events ):
251+ """Here we test an entire dictionary being interpolated into the log message."""
252+ sentry_init (integrations = [LoggingIntegration ()], default_integrations = False )
253+ events = capture_events ()
254+
255+ logger .error ("this is a log with a dictionary %s" , {"foo" : "bar" })
256+
257+ (event ,) = events
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+ )
263+ assert event ["logentry" ]["params" ] == {"foo" : "bar" }
264+
265+
266+ def test_logging_dictionary_args (sentry_init , capture_events ):
267+ """Here we test items from a dictionary being interpolated into the log message."""
268+ sentry_init (integrations = [LoggingIntegration ()], default_integrations = False )
269+ events = capture_events ()
270+
271+ logger .error (
272+ "the value of foo is %(foo)s, and the value of bar is %(bar)s" ,
273+ {"foo" : "bar" , "bar" : "baz" },
274+ )
275+
276+ (event ,) = events
277+ assert (
278+ event ["logentry" ]["message" ]
279+ == "the value of foo is %(foo)s, and the value of bar is %(bar)s"
280+ )
281+ assert (
282+ event ["logentry" ]["formatted" ]
283+ == "the value of foo is bar, and the value of bar is baz"
284+ )
285+ assert event ["logentry" ]["params" ] == {"foo" : "bar" , "bar" : "baz" }
0 commit comments