Сервис обрабатывает входящий запрос. Какой подход к логированию
правильный?
middle
correct_vs_wrong
#369
Вариант 1
@app.post("/orders")
async def create_order(req: OrderRequest):
print(f"got order from user {req.user_id} amount {req.amount}")
try:
payment = await charge(req.user_id, req.amount, req.card_token)
print(f"payment ok {payment.id}")
order = await save_order(req, payment.id)
print("order saved", order.id)
return {"order_id": order.id}
except Exception as e:
print(f"ERROR: {e}")
return {"error": "something went wrong"}, 500
Вариант 2
import structlog
from opentelemetry import trace
log = structlog.get_logger("orders")
@app.post("/orders")
async def create_order(req: OrderRequest):
# trace_id уже в contextvars через middleware
log.info("order received",
user_id=req.user_id,
amount=req.amount,
currency=req.currency)
try:
payment = await charge(req.user_id, req.amount, req.card_token)
log.info("payment charged",
payment_id=payment.id,
user_id=req.user_id,
amount=req.amount)
order = await save_order(req, payment.id)
log.info("order created",
order_id=order.id,
payment_id=payment.id,
user_id=req.user_id)
return {"order_id": order.id}
except PaymentDeclined as e:
log.warning("payment declined",
user_id=req.user_id,
reason=e.reason)
raise HTTPException(402, detail={"code": "payment_declined",
"reason": e.reason})
except Exception:
log.exception("order creation failed",
user_id=req.user_id)
raise HTTPException(500, detail={"code": "internal_error"})
Чтобы решить вопрос и сохранить попытку — войди.