# Logging

Every failure and fault writes one structured event. A domain failure's
event holds its code, kind, where it was raised, the path it travelled and
its internal fields. No stack is captured for a domain failure.

```json
{
  "event": "failure.rejected",
  "code": "quantity_unavailable",
  "kind": "conflict",
  "site": "domains/inventory/actions/reserve.jadpo:6",
  "trace": ["action reserve", "action place_order", "route POST /orders"],
  "request_id": "req_0b1e…",
  "internal": {
    "product_id": "0192f3a4-…",
    "requested": 12
  }
}
```

Internal values made of text, which can hold names or email addresses,
are logged as a keyed hash, so equal values still match up across events.

Logging isn't built yet ([What is built](failures-built.md)).
