mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-22 01:25:44 +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:
|
||||
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)
|
||||
|
||||
|
||||
|
|
|
@ -198,3 +198,31 @@ class TerseJsonTestCase(LoggerCleanupMixin, TestCase):
|
|||
self.assertEqual(log["url"], "/_matrix/client/versions")
|
||||
self.assertEqual(log["protocol"], "1.1")
|
||||
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