From 5ed31c4596d61cc93c0441f095877c3c25a7c1b0 Mon Sep 17 00:00:00 2001 From: Rohan Weeden <reweeden@alaska.edu> Date: Thu, 27 Jan 2022 14:54:38 -0900 Subject: [PATCH] Add JSON encoding default to encode items as strings --- rain_api_core/logging.py | 2 +- tests/test_logging.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/rain_api_core/logging.py b/rain_api_core/logging.py index 419334e..38359fb 100644 --- a/rain_api_core/logging.py +++ b/rain_api_core/logging.py @@ -158,7 +158,7 @@ def format(self, record: logging.LogRecord) -> str: obj = self.formatMessage(record) assert not any(isinstance(val, PercentPlaceholder) for val in _walk_json_values(obj)) - return filter_log_credentials(json.dumps(obj)) + return filter_log_credentials(json.dumps(obj, default=str)) class TaggingFilter(logging.Filter): diff --git a/tests/test_logging.py b/tests/test_logging.py index 5572469..6eff238 100644 --- a/tests/test_logging.py +++ b/tests/test_logging.py @@ -269,6 +269,18 @@ def test_json_logging_quotes_malformed(logger, log_io): assert json.loads(msg) == {"message": obj} +def test_json_logging_not_serializable(logger, log_io): + class SomeClass(): + def __repr__(self) -> str: + return "SomeClass()" + + logger.info(SomeClass()) + + msg = log_io.getvalue() + assert msg == '{"message": "SomeClass()"}\n' + assert json.loads(msg) == {"message": "SomeClass()"} + + def test_json_logging_missing_key(logger, custom_log_handler, log_io): custom_log_handler.setFormatter(JSONFormatter("%(does_not_exist)s")) logger.info("hello")