Skip to content

Commit 2c83462

Browse files
authored
Merge pull request #65 from modern-python/preserve-exc-info
preserve exc_info in logs dict
2 parents 0656e61 + b38050c commit 2c83462

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

lite_bootstrap/instruments/logging_instrument.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
if import_checker.is_structlog_installed:
1616
import orjson
1717
import structlog
18+
from structlog.processors import ExceptionRenderer
1819

1920

2021
ScopeType = typing.MutableMapping[str, typing.Any]
@@ -96,6 +97,15 @@ class LoggingConfig(BaseConfig):
9697
)
9798

9899

100+
class CustomExceptionRenderer(ExceptionRenderer):
101+
def __call__(self, logger: "WrappedLogger", name: str, event_dict: "EventDict") -> "EventDict":
102+
exc_info = event_dict.get("exc_info")
103+
event_dict = super().__call__(logger=logger, name=name, event_dict=event_dict)
104+
if exc_info:
105+
event_dict["exc_info"] = exc_info
106+
return event_dict
107+
108+
99109
@dataclasses.dataclass(kw_only=True, slots=True, frozen=True)
100110
class LoggingInstrument(BaseInstrument):
101111
bootstrap_config: LoggingConfig
@@ -111,7 +121,7 @@ def structlog_pre_chain_processors(self) -> list[typing.Any]:
111121
structlog.stdlib.PositionalArgumentsFormatter(),
112122
structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M:%S"),
113123
structlog.processors.StackInfoRenderer(),
114-
structlog.processors.format_exc_info,
124+
CustomExceptionRenderer(),
115125
structlog.processors.UnicodeDecoder(),
116126
]
117127

tests/instruments/test_logging_instrument.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ def test_logging_instrument_simple() -> None:
2121
try:
2222
logging_instrument.bootstrap()
2323
logger.info("testing structlog", key="value")
24+
try:
25+
msg = "some error"
26+
raise ValueError(msg) # noqa: TRY301
27+
except ValueError:
28+
logger.exception("logging error")
2429
std_logger.info("testing std logger", extra={"key": "value"})
2530
finally:
2631
logging_instrument.teardown()

0 commit comments

Comments
 (0)