1515if import_checker .is_structlog_installed :
1616 import orjson
1717 import structlog
18+ from structlog .processors import ExceptionRenderer
1819
1920
2021ScopeType = 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 )
100110class 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
0 commit comments