1import logging
2from logging.config import dictConfig
3
4dictConfig({
5 "version": 1,
6 "disable_existing_loggers": False,
7 "formatters": {
8 "default": {
9 "format": "%(asctime)s %(levelname)s %(name)s service=%(service)s env=%(environment)s request_id=%(request_id)s %(message)s",
10 "datefmt": "%Y-%m-%dT%H:%M:%SZ",
11 }
12 },
13 "handlers": {
14 "stdout": {
15 "class": "logging.StreamHandler",
16 "formatter": "default",
17 }
18 },
19 "root": {"handlers": ["stdout"], "level": "INFO"},
20})
21
22base_logger = logging.getLogger("checkout.api")
23request_logger = logging.LoggerAdapter(
24 base_logger,
25 {"service": "checkout-api", "environment": "prod", "request_id": "req-9f2c"},
26)
27
28request_logger.info(
29 "order accepted order_id=%s total_cents=%s",
30 order_id,
31 total_cents,
32)
33
34try:
35 capture_payment(order_id)
36except Exception:
37 request_logger.exception("payment capture failed order_id=%s", order_id)