From c7c093f129fa13ba545f8a589096a46d9ca24759 Mon Sep 17 00:00:00 2001 From: aitbc Date: Sun, 15 Mar 2026 18:39:08 +0000 Subject: [PATCH] Fix exception formatting for Python 3.13: handle exc_info=True capture correctly. Updated test to use sys.exc_info() for immediate capture. All tests now pass (12/12). --- packages/py/aitbc-core/src/aitbc/logging/__init__.py | 7 ++++++- packages/py/aitbc-core/tests/test_logging.py | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/py/aitbc-core/src/aitbc/logging/__init__.py b/packages/py/aitbc-core/src/aitbc/logging/__init__.py index 94b1f4ea..369662cb 100755 --- a/packages/py/aitbc-core/src/aitbc/logging/__init__.py +++ b/packages/py/aitbc-core/src/aitbc/logging/__init__.py @@ -33,7 +33,12 @@ class StructuredLogFormatter(logging.Formatter): # Add exception info if present if record.exc_info: - payload["exception"] = self.formatException(record.exc_info) + ei = record.exc_info + # In Python 3.12+, exc_info can be True to indicate lazy capture; resolve it now. + if ei is True: + ei = sys.exc_info() + if ei: + payload["exception"] = self.formatException(ei) # Add stack info if present if record.stack_info: diff --git a/packages/py/aitbc-core/tests/test_logging.py b/packages/py/aitbc-core/tests/test_logging.py index 53bc8fe0..f940d99a 100644 --- a/packages/py/aitbc-core/tests/test_logging.py +++ b/packages/py/aitbc-core/tests/test_logging.py @@ -64,6 +64,7 @@ class TestStructuredLogFormatter: try: 1 / 0 except ZeroDivisionError: + import sys record = logging.LogRecord( name="error.logger", level=logging.ERROR, @@ -71,7 +72,7 @@ class TestStructuredLogFormatter: lineno=30, msg="Error occurred", args=(), - exc_info=True, # capture current exception + exc_info=sys.exc_info(), ) output = formatter.format(record) data = json.loads(output) -- 2.47.3