mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-25 02:55:46 +03:00
Include exception in json logging (#11028)
This commit is contained in:
parent
0b4d5ce5e3
commit
bb228f3523
3 changed files with 35 additions and 0 deletions
1
changelog.d/11028.feature
Normal file
1
changelog.d/11028.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Include exception information in JSON logging output. Contributed by @Fizzadar at Beeper.
|
|
@ -65,6 +65,12 @@ class JsonFormatter(logging.Formatter):
|
||||||
if key not in _IGNORED_LOG_RECORD_ATTRIBUTES:
|
if key not in _IGNORED_LOG_RECORD_ATTRIBUTES:
|
||||||
event[key] = value
|
event[key] = value
|
||||||
|
|
||||||
|
if record.exc_info:
|
||||||
|
exc_type, exc_value, _ = record.exc_info
|
||||||
|
if exc_type:
|
||||||
|
event["exc_type"] = f"{exc_type.__name__}"
|
||||||
|
event["exc_value"] = f"{exc_value}"
|
||||||
|
|
||||||
return _encoder.encode(event)
|
return _encoder.encode(event)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -198,3 +198,31 @@ class TerseJsonTestCase(LoggerCleanupMixin, TestCase):
|
||||||
self.assertEqual(log["url"], "/_matrix/client/versions")
|
self.assertEqual(log["url"], "/_matrix/client/versions")
|
||||||
self.assertEqual(log["protocol"], "1.1")
|
self.assertEqual(log["protocol"], "1.1")
|
||||||
self.assertEqual(log["user_agent"], "")
|
self.assertEqual(log["user_agent"], "")
|
||||||
|
|
||||||
|
def test_with_exception(self):
|
||||||
|
"""
|
||||||
|
The logging exception type & value should be added to the JSON response.
|
||||||
|
"""
|
||||||
|
handler = logging.StreamHandler(self.output)
|
||||||
|
handler.setFormatter(JsonFormatter())
|
||||||
|
logger = self.get_logger(handler)
|
||||||
|
|
||||||
|
try:
|
||||||
|
raise ValueError("That's wrong, you wally!")
|
||||||
|
except ValueError:
|
||||||
|
logger.exception("Hello there, %s!", "wally")
|
||||||
|
|
||||||
|
log = self.get_log_line()
|
||||||
|
|
||||||
|
# The terse logger should give us these keys.
|
||||||
|
expected_log_keys = [
|
||||||
|
"log",
|
||||||
|
"level",
|
||||||
|
"namespace",
|
||||||
|
"exc_type",
|
||||||
|
"exc_value",
|
||||||
|
]
|
||||||
|
self.assertCountEqual(log.keys(), expected_log_keys)
|
||||||
|
self.assertEqual(log["log"], "Hello there, wally!")
|
||||||
|
self.assertEqual(log["exc_type"], "ValueError")
|
||||||
|
self.assertEqual(log["exc_value"], "That's wrong, you wally!")
|
||||||
|
|
Loading…
Reference in a new issue