Skip to content

Instantly share code, notes, and snippets.

@pythrick
Created July 25, 2023 00:29
Show Gist options
  • Select an option

  • Save pythrick/ddeafeac4084a9575e1b8863b486516a to your computer and use it in GitHub Desktop.

Select an option

Save pythrick/ddeafeac4084a9575e1b8863b486516a to your computer and use it in GitHub Desktop.
def _log_execution( # type: ignore[override]
self,
func: Callable[
[PropanMessage[MsgType]],
Awaitable[T_HandlerReturn],
],
**broker_args: AnyDict,
) -> Callable[[PropanMessage[MsgType]], Awaitable[T_HandlerReturn]]:
@wraps(func)
async def log_wrapper(message: PropanMessage[MsgType]) -> T_HandlerReturn:
log_context = self._get_log_context(message=message, **broker_args)
with context.scope("log_context", log_context):
self._log("Received", extra=log_context)
try:
r = await func(message)
except SkipMessage as e:
self._log("Skipped", extra=log_context)
raise e
except Exception as e:
self._log(repr(e), logging.ERROR, extra=log_context, exc_info=e)
raise e
else:
self._log("Processed", extra=log_context)
return r
return log_wrapper
# ...
def _log(
self,
message: str,
log_level: Optional[int] = None,
extra: Optional[AnyDict] = None,
exc_info: BaseException | bool | None = None,
) -> None:
if self.logger is not None:
self.logger.log(
level=(log_level or self.log_level), msg=message, extra=extra, exc_info=exc_info
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment